为了账号安全,请及时绑定邮箱和手机立即绑定

scope中的参数问题

老师能帮忙解答下 scope:{ flavor :"=" } 为什么要给flavor赋值? flaor再这里代表的是什么?

正在回答

4 回答

下面是使用@的写法

<div ng-controller="MyCtrl">
        <drink hahaha="{{ctrlFlavor}}"></drink>
     </div>


var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
  $scope.ctrlFlavor="百威";
}])
myModule.directive("drink", function() {
   return {
      restrict:'AE',

      scope:{

           papapa:'@hahaha'   

   }

      template:"<div>{{papapa}}</div>",
   }
});


0 回复 有任何疑惑可以回复我~
#1

老汪仔

如果 你在directive中这样写 scope:{ papapa:'@' } 那就意味着 scope{ papapa:'@papapa' } 显然不对的,但为什么老师这样写没事呢,因为恰好老师举的例子中template中的flavor和<drink>中的属性名flavor命名相同,然而他们两个所扮演 的角色是不同的
2016-06-28 回复 有任何疑惑可以回复我~
#2

老汪仔

如果 你在directive中这样写 scope:{ papapa:'@' } 那就意味着 scope{ papapa:'@papapa' } 显然不对的,但为什么老师这样写没事呢,因为恰好老师举的例子中template中的flavor和<drink>中的属性名flavor命名相同,然而他们两个所扮演 的角色是不同的
2016-06-28 回复 有任何疑惑可以回复我~

    <div ng-controller="MyCtrl">
        <drink hahaha="{{ctrlFlavor}}"></drink>
     </div>


var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
  $scope.ctrlFlavor="百威";
}])
myModule.directive("drink", function() {
   return {
      restrict:'AE',
       template:"<div>{{papapa}}</div>"
        ,
        link:function(scope,element,attrs){
          scope.papapa=attrs.hahaha;  
        }
   }
});


0 回复 有任何疑惑可以回复我~

这一节讲蒙蔽了

scope.flavor = attr.flavor。 这个写反了吧,应该是attr.flavor = scope.flavor

0 回复 有任何疑惑可以回复我~

首先,flavor是一个属性名,这个属性的值就是controller里$scope.ctrlFlavor的值。

<drink flavor="{{ctrlFlavor}}"></drink>

指令就是为了替换上面这段代码,

myDemo.directive('drink', function () {
    return {
        restrict: 'AE',
        scope: {
            flavor: '@'
        },
        template: '<div>{{flavor}}</div>',
        link: function (scope, element, attr) {
            scope.flavor = attr.flavor;
        }
    }
});
 template: '<div>{{flavor}}</div>' // 这里flavor就是scope.flavor;

而 scope.flavor = attr.flavor;  就是等于 {{ctrlFlavor}} (controller里的$scope.ctrlFlavor)

为了不每次都写一个link,(太麻烦)

于是, 在@的情况下

scope: {
    flavor: '@'
},

就是等于link里面的

scope.flavor = attr.flavor;

一句话总结:这三个地方的flavor就是一个东西,你可以把他们一起换个名字flavor2 什么的,试试

//1
scope: {
    flavor: '@'
},

//2
template: '<div>{{flavor}}</div>',

//3
<drink flavor="{{ctrlFlavor}}"></drink>

我也是刚学习,那里理解错了请指教。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
AngularJS实战
  • 参与学习       205465    人
  • 解答问题       1158    个

一起学习AngularJS的基础教程,通过实例学习并学会AngularJS

进入课程

scope中的参数问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信