转自:https://www.cnblogs.com/best/tag/Angular/

关于自定义指令的命名,你可以随便怎么起名字都行,官方是推荐用[命名空间-指令名称]这样的方式,像ng-controller。不过你可千万不要用 ng-前缀了,防止与系统自带的指令重名。另外一个需知道的地方,指令命名时用驼峰规则,使用时用-分割各单词。如:定义myDirective,使用时 像这样:<my-directive>。

这里列出directive的合法命名:

  • ng:bind
  • ng-bind
  • ng_bind
  • x-ng-bind
  • data-ng-bind

我是教师,在新建试题输入分数的时候应该只能输入数字才对,输入其他内容是不合法的,而且我希望这个分数是1~10之间的数字。能否只在输入框上加一个属性.我们定义一个叫做fractionNum的指令如下

  1. app.directive('fractionNum',function(){
  2. return {
  3. link : function(scope, elements, attrs, controller){
  4. elements[0].onkeyup = function(){
  5. if(isNaN(this.value) || this.value<1 || this.value>10){
  6. this.style.borderColor = 'red';
  7. }
  8. else{
  9. this.style.borderColor = '';
  10. }
  11. };
  12. }
  13. };
  14. });

link的值是一个函数,用来定义指令的行为。从传入的参数中可以获取到当前元素,我们便可以拿当前元素开刀了。我在此处监听当前元素的keyup事件,获取元素的值,如果不是1~10之间的数字,则把输入框的边框颜色变为红色。这下这个指令就可以工作了。定义好的指令就可以在模板中使用了,使用方法如下:

  1. 分数:<input type="text" ng-model="question.fraction" fraction-num /><br />
 
 
controller,link,compile有什么不同

  1. //directives.js增加exampleDirective
  2. phonecatDirectives.directive('exampleDirective', function() {
  3. return {
  4. restrict: 'E',
  5. template: '<p>Hello {{number}}!</p>',
  6. controller: function($scope, $element){
  7. $scope.number = $scope.number + "22222 ";
  8. },
  9. //controllerAs:'myController',
  10. link: function(scope, el, attr) {
  11. scope.number = scope.number + "33333 ";
  12. },
  13. compile: function(element, attributes) {
  14. return {
  15. pre: function preLink(scope, element, attributes) {
  16. scope.number = scope.number + "44444 ";
  17. },
  18. post: function postLink(scope, element, attributes) {
  19. scope.number = scope.number + "55555 ";
  20. }
  21. };
  22. }
  23. }
  24. });
  25. //controller.js添加
  26. dtControllers.controller('directive2',['$scope',
  27. function($scope) {
  28. $scope.number = '1111 ';
  29. }
  30. ]);
  31. //html
  32. <body ng-app="phonecatApp">
  33. <div ng-controller="directive2">
  34. <example-directive></example-directive>
  35. </div>
  36. </body>

 运行结果:

  1. Hello 1111 22222 44444 55555 !

由结果可以看出来,controller先运行,compile后运行,link不运行(link就是compile中的postLink)。将上例中的compile注释掉运行结果:

  1. Hello 1111 22222 33333 !

由结果可以看出来,controller先运行,link后运行,link和compile不兼容。compile改变dom,link事件的触发和绑定

49.AngularJs 指令directive之controller,link,compile的更多相关文章

  1. 【转载】AngularJs 指令directive之controller,link,compile

    关于自定义指令的命名,你可以随便怎么起名字都行,官方是推荐用[命名空间-指令名称]这样的方式,像ng-controller.不过你可千万不要用 ng-前缀了,防止与系统自带的指令重名.另外一个需知道的 ...

  2. AngularJs 指令 directive中link,controller 的区别

    其实严格来讲,link和controller是完全不同的概念,这里讲区别有点牵强. angular指令中,带有link和controller两个函数,很多人在写指令的时候不知道是写在link里 还是c ...

  3. AngularJS 指令生命周期 complie link

    AnguarJS指令从解析到生效一共会经历Inject.Compile.Controller加载.Pre-link.Post-link这几个主要阶段. 一.AngularJS指令执行过程 1.加载An ...

  4. angularJS中directive与controller之间的通信

    当我们在angularJS中自定义了directive之后需要和controller进行通讯的时候,是怎么样进行通讯呢? 这里介绍3种angular自定义directive与controller通信的 ...

  5. AngularJS自定义Directive与controller的交互

    有时候,自定义的Directive中需要调用controller中的方法,即Directive与controller有一定的耦合度. 比如有如下的一个controller: app.controlle ...

  6. angularJs 指令调用父controller某个方法

    1.父级controller:例如有个 init() 方法; 父级与子级的通信数据是$scope.controlFlag={}; 那么可以在父级controller里这样写:$scope.contro ...

  7. AngularJs 指令directive之require

    controller的用法分为两种情形,一种是require自定义的controller,由于自定义controller中的属性方法都由自己编 写,使用起来比较简单:另一种方法则是require An ...

  8. Angularjs之directive指令学习笔记(二)

    1.Directive的五个实例知道driective作用.其中字段restrict.template. replace.transclude.link用法 参考文章链接地址:http://damoq ...

  9. AngularJS的指令(Directive) compile和link的区别及使用示例

    如果我想实现这样一个功能,当一个input失去光标焦点时(blur),执行一些语句,比如当输入用户名后,向后台发ajax请求查询用户名是否已经存在,好有及时的页面相应. 输入 camnpr 失去焦点后 ...

随机推荐

  1. jquery访问ashx文件示例

    转自原文jquery访问ashx文件示例 .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件 ...

  2. leetCode(24):Binary Search Tree Iterator

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  3. hdu2546 饭卡 01-背包问题

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem ...

  4. 判断一个整数是否是回文数C++实现 leetcode系列(九)

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  5. 你不知道的JavaScript(六)Box&Unbox

    很多语言中都有Box和Unbox的概念,很多书籍把Box翻译为"装箱操作",指的是將基本数据类型包装成对象:Unbox和它相反,把对象类型转换为基本类型. 我们知道JavaScri ...

  6. 51nod-1134 最长递增子序列,用线段树将N^2的dp降到NlogN

    题目链接 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行 ...

  7. 3ds Max实例教程-制作卡通蓝色小人

    此篇教程分享使用3ds Max制作卡通蓝色小人,是根据作者梦境出现的画面为原型,加以改造,得到的最终效果图. 创作一张图最重要的地方是先用纸和笔画出草稿图.你需要表明所有的细节,研究角色的特点——我发 ...

  8. c++string类的简单介绍

    #include "iostream" #include "string" using namespace std; /*@author:浅滩 *family: ...

  9. requests 常见方法总结

    请求设置:requests.get/post ( url, data={}, params={}, headers={}, timeout=0.01, files={}   Session()    ...

  10. webpack中optimization 的 runtimeChunk 是干嘛的

    结论:把runtime部分的代码抽离出来单独打包 https://developers.google.com/web/fundamentals/performance/webpack/use-long ...