自定义指令问题

  • 每自定义一个指令,都会有自己的作用域。
  • 默认情况下,指令当中的作用域与父作用域是同一个 ($scope就是同一个)
父作用域的值发生变化,子作用域的值也发生变化。子作用域的值发生变化,父作用域也发生变化。
  • 非默认情况下,可以指定scope。scope值可以是bool 还可以是对象{}。
  • 当scope值是bool,为true时。

  • 代表的是独立作用域。第一次,父修改会影响子,一旦子作用域修改过之后,就变成独立作用域。
  • 互相不影响,如果子作用域没有 ,会默认找父作用。
  • 当scope值是bool,为false时(默认情况)

  • 使用的是同一个作用域,要改大家一起改。
 //1.创建模板
        var app = angular.module('app', []);
        //2.创建控制器
        app.controller('xmgController', ['$scope', function ($scope) {
            $scope.name = "我是父控制器的name";
        }]);
        app.directive('xmg',function () {
           return {
               restrict:'EA',
               template:'<h1>{{name}}</h1><input type="text" ng-model="name">',
               controller:function ($scope) {
               },
               scope:false
           }
        });
    </script>
</head>
<body ng-app="app" ng-controller="xmgController">   //父作用域
   <input type="text" ng-model="name">
   <hr>
   <div xmg></div>   //子作用域 <h1>{{name}}</h1><input type="text" ng-model="name"> 
</body>
  • 当scope值是对象的时候

scope:{
            }
当scope值是对象的时候,并且什么都不传入。
  • 隔离作用域,没有也会不找父作用域。
  • 当使用@修饰时
  • 外界可以传递数据到指令内部作用域。(父作用域中的值add/name/fatherAge传入到指令作用域中)
  • 把要传递的数据写到{}里面
  • 单项传递
1.当使用@修饰时,传递数据必须得要使用插值语法{{父控制器的属性}}
<div xmg age="{{fatherAge}}" address="{{}}">
2.@特点:父作用域修改,子作用域也会修改,子作用域修改,不会影响父作用域。
//1.创建模板
        var app = angular.module('app', []);
        //2.创建控制器
        app.controller('xmgController', ['$scope', function ($scope) {
            $scope.name = "我是父控制器的name";
            $scope.fatherAge = 'father传入的fatherAge';
            $scope.add = "我是父控制器的add";
        }]);
        app.directive('xmg',function () {
           return {
               restrict:'EA',
               template:'<input type="text" ng-model="age"><p>{{age}}</p><p>{{address}}</p>',
               controller:function ($scope) {
                    $scope.name = "我是指令name";
               },
               scope:{
                   age:'@',
                   address:'@'
               }
           }
        });
    </script>
</head>
<body ng-app="app" ng-controller="xmgController">
    <input type="text" ng-model="fatherAge">
    <p>{{fatherAge}}</p>
    <hr>
// 外界可以传递数据到指令内部作用域。
    <div xmg age="{{fatherAge}}" address="{{add}}"></div>
</body>
  • 当使用=修饰时
  • 1.外界传递数据时不用使用插值语法 直接跟属性名称即可
    <div xmg age="父属性名称" address="父属性名称"></div>
  • 2.=特点:父作用域改变,子作用随着改变。子作用域的改变也会影响到父作用的属性。
  • 属性的双向传递
//1.创建模板
        var app = angular.module('app', []);
        //2.创建控制器
        app.controller('xmgController', ['$scope', function ($scope) {
            $scope.name = "我是父控制器的name";
            $scope.fatherAge = 'father传入的fatherAge';
            $scope.add = "我是父控制器的add";
        }]);
        app.directive('xmg',function () {
           return {
               restrict:'EA',
               template:'<input type="text" ng-model="age"><p>{{age}}</p><p>{{address}}</p>',
               controller:function ($scope) {
                    $scope.name = "我是指令name";
               },
               scope:{
                   age:'=',
                   address:'='
               }
           }
        });
    </script>
</head>
<body ng-app="app" ng-controller="xmgController">
    <input type="text" ng-model="fatherAge">
    <p>{{fatherAge}}</p>
    <hr>
    <div xmg age="fatherAge" address="add"></div>
</body>
  • 当使用&修饰时
  • 代表外界传送一个方法进来(父作用域传递方法到子作用域),不会传送属性。
    //1.创建模板
        var app = angular.module('app', []);
        //2.创建控制器
        app.controller('xmgController', ['$scope', function ($scope) {
  //父作用域的方法(注意!!!!!!!!!!!!)
                $scope.fatherMothod = function () {
                    alert('执行了父方法fatherMothod');
                }
        }]);
        app.directive('gxq',function () {
           return {
               restrict:'EA',
               template:'<h1>{{name}}</h1> <p ng-click="show()">点我</p>',
               controller:function ($scope) {

               },
         scope:{
                   name:'@', 
                   age:'=', 
                   show:'&'   
               }
           }
        });
    </script>
</head>
<body ng-app="app" ng-controller="xmgController">
//父作品用域的方法fatherMothod()通过&修饰符传递到子作用域(注意!!!!!)
<div gxq name="{{name}}" age="fatherAge" show="fatherMothod()"></div>
//这里的fatherAge属性不会传递过来。(注意!!!!!!!!)
</body>
  • directive(自定义指令)中cotroller/link

  • cotroller一般都是处理业务逻辑
  • link一般都是处理dom元素
        //1.创建模板
        var app = angular.module('app', []);
        //2.创建控制器
        app.controller('xmgController', ['$scope', function ($scope) {

        }]);
        app.directive('gxq',function () {
           return {
               restrict:'EA',
               template:'<div><h1 ng-click="hello()">hello</h1></div>',
               replace:true,
               controller:function ($scope) { //一般都是处理业务逻辑
               },
               link:function ($scope,ele,attr) { //一般都是处理dom元素。
                   var res = attr.xmgshow;
                   if (res == 'false'){
                       ele.css({
                           'display':'none'
                       });
                   }
               },
           }
        });
    </script>
</head>
<body ng-app="app" ng-controller="xmgController">
<gxq xmgshow="false"></gxq>
  • link中的ele代表的是<div><h1 ng-click="hello()">hello</h1></div>
  • link中的attr代表的是里面的属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容