美文网首页我爱编程
angular-自定义指令-E

angular-自定义指令-E

作者: AndyRony | 来源:发表于2018-04-18 15:25 被阅读0次

    angular自定义指令

    (1)directive---restrict属性EACM

    (function() {

      'use strict';

      angular.module('app')

        .directive('searchTitle', ['$timeout', function($timeout) {

          return {

            restrict: 'EA',

            }

    E:元素,html使用方式:<my-directive></my-directive>

    A:属性,html使用方式:<div my-directive></div>

    C:class属性,html使用方式:<div class="my-directive"></div>

    M:注释,html使用方式:<!-- directive:my-directive -->

    (2)directive---scope隔离作用域,用户和父作用域进行沟通交互的方式,三种形式:@,=,&

    @ :  表示单向绑定,接收父作用域的一个变量值,值改变后不影响父作用域的变量值

    = :引用传递,与父scope中的属性进行双向绑定

    & :  传递一个来自父scope的函数,一个操作

     return {

            restrict: 'EA',

            scope:{

                   highSearch: '@',  //值传递 (字符串,单向绑定)

                  searchData:'&',   //传递一个来自父scope的函数,一个操作,这个函数会在html对应的js中实现

                   inputData:'='    //引用传递,双向绑定

              },

      }

    (3)directive---templateUrl模板   + template模板

    return {   template:"<h1>这是自定义指令中的模板</h1>"  }

    结合replace:true;属性,当restrict为E时,就替换整个template中的内容显示到页面

    假设,template模板内的内容过多,就应该使用

    return{ templateUrl:'tpl/blocks/searchTitle.html',  }来对应一个单独的html模板文件

    (4)directive---link    在指令中操作DOM,我们需要link参数,这参数要求声明一个函数,称之为链接函数。

    link: function(scope, element, attrs) {

      // 在这里操作DOM

    }

    如果指令使用了require选项,那么链接函数会有第四个参数,代表控制器或者所依赖的指令的控制器。

    // require 'SomeController',

    link: function(scope, element, attrs, SomeController) {

      // 在这里操作DOM,可以访问required指定的控制器

    }

    参数说明:scope,element, attrs

    scope:即与指令元素相关联的当前作用域,可以用来注册监听器:scope.$watch()

    element:即当前指令对应的元素,使用它可以操作该元素及其子元素。例如,这个span就是指令 my-directive所使用的元素。

    attrs:由当前元素的属性组成的对象。

    到此,设置E属性尝试


    html文件

    1.html

    对应的js文件:

    1.js

    观察1.html,可以发现my-dir是个自定义指令,

    <my-dir   name="{{customerName}}"   amount="credit"   save="saveChanges('我是自定义指令中要响应的事件')"  ></my-dir>

    自定义指令directive文件:

    myDir.js

    解析此文件,restrict设置为”E“,页面呈现为元素,scope作用域中name为单向值传递,amount为双向绑定,save为传递一个来自父scope的函数,一个操作

    template:"<div>"+"{{name}}: <input   ng-model='amount'  />"  + "<button  ng-click='save()'>保存</button>"  + "<div>",结合replace为true,就替换模板内容。

    其中button的ng-click = 'save()',那么这个save事件的响应,就靠指令和js交互了,

    scope中配置了save:"&",

    页面html中指令配置的是,<my-dir   save="saveChanges('我是自定义指令中要响应的事件')">,相当于把js中的$scope.saveChanges事件传递过来了

    link在指令中操作dom,

    注册监听器:scope.$watch("amount",function(newVal,oldval){    

         //这里是监听amount对应的”credit“值的变化,amount="credit"对应的是js的$scope.credit

    });

    scope.$watch("name",function(newVal,oldval){

         //这里是监听name对应的{{customerName}}值的变化,页面中name="{{customerName}}"对应的是js的$scope.customerName

    });


    //发现文章 https://blog.csdn.net/baidu_24024601/article/details/52710331

    相关文章

      网友评论

        本文标题:angular-自定义指令-E

        本文链接:https://www.haomeiwen.com/subject/fzgvkftx.html