孤立范围的不可见属性

时间:2014-03-12 21:10:09

标签: javascript angularjs angularjs-directive

var myApp = angular.module('myApp',[]);

myApp.controller('myCtrl',function($scope) {
    $scope.name = 'Superhero';
})

myApp.directive('dir', function() {
  return {
    restrict: 'AE',
      scope:{
          name:"="
      },
      controller: function($scope) {},
      link: function(scope, element, attrs, ctrls) {
           scope.insider="FFFF"
    }
  }

});

在渲染下面的html时,为什么'insider'显示为null。

使用隔离范围时,存储指令相关变量的理想方法是什么? 为什么属性没有在模板中正确呈现?

jsfiddle

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

<div ng-app="myApp"><div ng-controller="myCtrl">
  Hello, {{name}}!
    <dir name='name'>{{insider}}{{name}}</dir>
</div></div>

1 个答案:

答案 0 :(得分:0)

请在版本1.2.0的更改日志中查看此重大更改:

  

由于d0efd5ee,在应用程序模板或某些其他指令模板中定义的子元素不会获得隔离范围。从理论上讲,没有人应该依赖这种行为,因为它非常罕见 - 在大多数情况下,isolate指令都有一个模板。

您的问题实际上与Directives with Isolated scope versions conflict

这个问题密切相关

因此,如果你创建一个模板,一切正常!


此外...

作为一种类似于调试的检查范围的方法,您实际上可以使用此插值字符串读取insider属性:

{{$$childHead.insider}}{{name}}

但不要在最终实施中这样做!

相关问题