隔离作用域的不可见属性

invisible properties of isolated scope

本文关键字:属性 作用域 隔离      更新时间:2023-09-26
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.2.0版本的变更日志:

由于de0efd5ee,在应用模板或其他指令模板中定义的子元素不会获得隔离作用域。理论上,没有人应该依赖这种行为,因为它是非常罕见的——在大多数情况下,隔离指令有一个模板。

你的问题实际上与这个关于具有隔离作用域版本冲突的指令的问题密切相关

所以如果你创建一个模板,一切都很好!


此外…

作为一种类似调试的检查作用域的方式,您实际上可以使用这个插值字符串读取insider属性:

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