玩转angularJs——通过自定义ng-model,不仅仅只是input可以有双向绑定

angularJs双向绑定特性在开发中很方便很实用,但是由于ng-model一般只能挂在input上,因此我们需要自定义ng-model来在div等元素上使用该标签。

自定义指令:

 1 //自定义ngModel的属性
 2     .directive(‘contenteditable‘, [‘$window‘, function() {
 3         return {
 4             restrict: ‘A‘,
 5             require: ‘?ngModel‘, // 此指令所代替的函数
 6             link: function(scope, element, attrs, ngModel) {
 7                 if (!ngModel) {
 8                     return;
 9                 } // do nothing if no ng-model
10                 // Specify how UI should be updated
11                 ngModel.$render = function() {
12                     element.html(ngModel.$viewValue || ‘‘);
13                 };
14                 // Listen for change events to enable binding
15                 element.on(‘blur keyup change‘, function() {
16                     scope.$apply(readViewText);
17                 });
18                 // No need to initialize, AngularJS will initialize the text based on ng-model attribute
19                 // Write data to the model
20                 function readViewText() {
21                     var html = element.html();
22                     // When we clear the content editable the browser leaves a <br> behind
23                     // If strip-br attribute is provided then we strip this out
24                     if (attrs.stripBr && html === ‘<br>‘) {
25                         html = ‘‘;
26                     }
27                     ngModel.$setViewValue(html);
28                 }
29             }
30         }
31     }])

页面中div可以这样使用ng-model:

1 <div class="icon-arrow-title title-color-2" contenteditable="true" ng-model="param.MobileNum" style="right: 15px;"></div>

双向绑定就可以用了。

时间: 2024-09-29 03:27:51

玩转angularJs——通过自定义ng-model,不仅仅只是input可以有双向绑定的相关文章

angularjs系列之双向绑定

把之前学到ng的一些东西和大家分享一下.首先要讲的就是ng最重要的一个特性,双向绑定.(angular源码全部是1.5.0版本) 那么一个双向绑定的代码是什么样子.来看ng官网上的例子,代码就是这么简单. <script> angular.module('bindExample', []) .controller('ExampleController', ['$scope', function($scope) { $scope.test = 'Whirled'; $scope.testFn =

走进AngularJs(五)自定义指令----(下)

自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定义指令(上)中,写了一个简单的<say-hello></say-hello>,能够跟美女打招呼.但是看看人家ng内置的指令,都是这么用的:ng-model="m",ng-repeat="a in array",不单单是作为属性,还可以赋值给它,与

一招制敌 - 玩转 AngularJS 指令的 Scope (作用域),讲得特别好

学习了AngularJS挺长时间,最近再次回首看看指令这部分的时候,觉得比自己刚开始学习的时候理解的更加深入了,尤其是指令的作用域这部分. 步入正题: 每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部的Controller提供的作用域或者根作用域($rootScope)),还是创建一个新的自己的作用域,当然AngularJS为我们指令的scope参数提供了三种选择,分别是:false,true,{}:默认情况下是false. scope = false 首先我们来看

AngularJS笔记--自定义指令

在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件.AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板.提供给前台html调用. 一. 指令的简单定义.  下面定义了一个简单的控件,点击后调转到博客园. Note: 1.命名方式:directive必须以小写字母开头,其中如果后面由大写字母,html调用的时候就要用 - 将单词分开. <html> <script src='angular.js'></script> <scri

带你走近AngularJS - 创建自定义指令

为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令.现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架. 目前有很多JavaScript 产品提供插件给Web开发人员.例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包.但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript 模式来写 jQuery

angularjs随笔01 数据双向绑定理解 自定义过滤器 时钟更新列子

1.   数据的双向绑定可以简单的理解为,无论在文本框中输入什么,都会在数据模型中显示出来输入的内容, 双向绑定的模型和数据是进行动态绑定的,实时检查进行修改. <input type="text" ng-model="name"> {{name}} 在上述代码中,通过angular.js将数据模型对象($scope)的name属性与文本模型绑定在一起,然后就实现了在输入框输入什么都会 在文本模型中显示对应的内容,实时更新. 控制器controller,

玩转CSDN之自定义博客栏目

玩转CSDN之自定义博客栏目 不得不说,CSDN在IT界还是非常不错的, 不管是文章数量还是质量,都非常不错,很多程序猿也在CSDN建了窝,那么如何把CSDN的主页设置的更加符合自己的口味,就是我们今天要做的事. CSDN博客的栏目指的是这块内容: 这里面,有的是CSDN博客自带的内容,比如个人资料.博客专栏等,还有些内容,我们可以自定义,首先,我们需要进入个人的博客首页,点击管理博客,并切换到博客栏目选项卡,这里,就是我们修改自定义栏目的主战场了. 自定义链接 我们首先来看最简单的,增加一个栏

走进AngularJs(四)自定义指令----(中)

上一篇简单介绍了自定义一个指令的几个简单参数,restrict.template.templateUrl.replace.transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没有涉及行为.这一篇将继续学习ng自定义指令的几个重量级参数,了解了它们之后我们的custom directive将不光能"看",还要能"动".开始~ 理解compile和link 不知大家有没有这样的感觉,自己定义指令的时候跟写jQuery插件有几分相似之处,都是先预先

angularJS中自定义指令

学习了angularJS一周,但是大部分时间被自定义指令占用了.博主表示自学互联网好心塞的,发现问题的视觉很狭窄,这比解决问题要更难.这篇文章首先介绍了自定义,然后介绍了在使用自定义指令遇到的问题. 代码模板: var myModule = angular.module("myModule",[]); myModule.directive('directiveName',function(){ return{ restrict:string, template:string, temp