角度1.2指令范围问题

时间:2013-12-12 08:14:54

标签: javascript angularjs

在指令中使用隔离范围无模板创建指令时,但在指令中有一些dom,指令内的dom无法绑定到指令的范围。

  <div ng-controller="testCtrl">
    {{hehe}}
    <hr/>
    <div test-directive="hello" >
      Directive Data: 
      <div>{{test}}</div>
    </div>
  </div>

angular.module('app',[])
.controller("testCtrl",['$scope', function ($scope) {

  $scope.hehe = "test from controller";

}])
.directive("testDirective",function(){
  return{
    scope: {
      "testDirective": "="
    },
    controller: ['$scope', function ($scope) {

      $scope.test = "test from directive";

    }]
  };
});

Demo

在演示中,有两个有角度的lib版本,1.1.5和1.2.4,其中一个被评论。

代码适用于1.1.5但不适用于1.2.4。

有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:1)

这是1.2.x的变化。隔离范围是真正隔离的,您只能通过内部指令(通过template:templateUrl:定义)与模板绑定。

HTML中的模板永远不会继承指令的范围。

隔离范围的目的是将指令的内部实现与外部模板隔离开来。旧的行为并没有完全隔离指令,使事情更加紧密。

除非您在指令中使用内部模板,否则不建议使用隔离范围。不使用template:templateUrl:时,您应该只使用scope: true或根本不使用范围。