angular directive详解
还是大漠穷秋的一个简单demo,在这里我写了一些详细的注释有助于你的理解
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <style> .expander { border: 1px solid black; width: 250px; } .expander > .title { background-color: black; color: white; padding: .1em .3em; cursor: pointer; } .expander > .body { padding: .1em .3em; } </style> <script src="js/angular.min.js"></script> </head> <body> <div ng-app="myapp"> <hello></hello> <span>第二个例子</span> <div ng-controller="somecontroller"> <expander class="expander" expander-title="title"> {{text}} </expander> </div> </div> <script> var app = angular.module("myapp", []); app.directive("expander", function () { return { restrict: 'EA', transclude: true, replace: true, //scope:false指的是现有的scope scope:true指一个新的的scope scope:{}值一个独立的scope //默认情况下是不可以访问父scope模型中的任何东西 但是你可以指定把某些属性传递到你的指令中,你可以把这些属性名称看 //成函数的形参 虽然独立的scope不会继承模型的属性,但是它们仍然是父scope的孩子 它们带有一个指向父scope对象的$parent属性 //大多数人在这里看不懂 这里的意思是什么呢 //绑定策略有三种 分别为@、=、& //@ 表示把当前属性作为字符串传递。你还可以绑定来自外层scope的值 在属性值中插入{{}}即可 //= 表示绑定当前属性,它带有一个来自指令父scope的属性 //$ 传递一个来自父scope的函数,稍后调用 //我们的这个 title:'=expanderTitle'表示 创建scope的一个局部属性,名为title,它与父scope中的一个定义在expander-title中 //的属性绑定。这里,为了方便起见,我们把title重命名成expanderTitle。我们可以把scope编写成:{expanderTitle:'='},然后 //在模板中用expanderTitle来引用它。但是,如果其他指令也带有一个title属性,那么最好在API中删掉title属性,并重新起一个不同 //的名字,这样就可以在局部空间里面使用它了,当然这里的命名方式与指令自身一样采用了驼峰法则 //如果你觉得应该把扩展条的标题定义在模板中,而不应该定义在数据模型中,那么你可以在scope的定义中使用字符串风格的属性 //用@符号作为标志进行传递 实例如下 // scope: { title: '@expanderTitle' }, // 在模板中,我们可以使用下面这种方法达到同样的效果 // <expander class='expander' expaner-title='点击展开'>{{text}}</expander> //当然 我们也可以使用双花括号插值语法把title绑定到控制其scope上 //<expander class='expander' expaner-title='{{title}}'>{{text}}</expander> scope:{ title:'=expanderTitle' }, template: '<div>' + '<div class="title" ng-click="toggle()">{{title}}</div>' + '<div class="body" ng-show="showMe" ng-transclude></div>' + '</div>', link: function (scope, element, attrs) { scope.showMe = false, scope.toggle = function toggle() { scope.showMe = !scope.showMe; }; } } }); app.controller("somecontroller", function ($scope) { $scope.title = "点击展开"; $scope.text = "这里是内部的内容。"; }); app.directive("hello", function () { return { //指令生明方式指令选项 e代表元素 ,a代表属性,c代表样式类,M 代表注释 restrict: 'E', template: '<div>Hi here</div>', //是否替换 replace: true }; }); </script> </body> </html>
有关操作DOM元素的明天在写吧
遨游在知识的海洋,深入技术的研究