2015-04-23 37 views
0

问题角指令控制范围的知名度

为什么不monkeyselected到模板可见?

普拉克

http://plnkr.co/edit/djS0KWyfJNKD0tfZ0IiV?p=preview

代码

<head> 
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.js"></script> 
    <script type="text/javascript"> 
     angular 
      .module('toruSelect', []) 
      .directive('toruSelect', function() { 
       return { 
        restrict: 'AE', // Allow usage as A - attribute, E - element 
        scope: { // Isolated scope 
         selected: '=' // Bi-directional binding to selected attribute, 
        }, 
        controller: ['$scope', function ($scope) { 
         $scope.monkey = 'MONKEY'; 
         console.log('toruSelect.controller.$scope', $scope); 
        }] 
       } 
      }); 


     var app = angular.module('app', ['toruSelect']); 
     app.controller('AppCtrl', function($scope) { 
      $scope.val = 'initial'; 
      $scope.appData = 'App data'; 
     }); 
    </script> 
</head> 
<body ng-controller="AppCtrl"> 
    <h1>Directives and scopes..</h1> 
    <div toru-select selected="val"> 
     <div style="color: red">RESULT: toruSelect.controller.monkey: {{monkey}}</div> 
     <div>EXPECTED: toruSelect.controller.monkey: MONKEY</div> 
     <div style="color: red">RESULT: toruSelect.controller.selected: {{selected}}</div> 
     <div>EXPECTED: toruSelect.controller.selected: initial</div> 
    </div> 
</body> 

结果

Directives and scopes.. 

RESULT: toruSelect.controller.monkey: 
EXPECTED: toruSelect.controller.monkey: MONKEY 
RESULT: toruSelect.controller.selected: 
EXPECTED: toruSelect.controller.selected: initial 
+2

您的示例中没有模板。 – zeroflagL

+0

为什么你需要2个模块? –

回答

1

正如你指出来你的指令的评论,它有一个隔离的范围,所以附有monkey密钥值可以用指令的范围,而不是在控制器的一个。

对于selected,您必须显示{{val}}而不是{{selected}},因为它是指令作用域上的双向绑定所涉及的变量。

+0

作为Angular的新手,我期待着“隔离范围”的含义,它将指令与外界隔离开来。我认为,由于绑定位于指令(定义标签)内,因此范围对模板可见。 – tiblu

+0

@ mr-blackus它曾经以我期望的方式工作,但之后因某种原因而改变 - http://www.bennadel.com/blog/2728-breaking-changes-in-isolate-scope-behavior-in-angularjs -1-2.htm – tiblu

+0

啊不知道,谢谢你的链接。 – Blackus