angular.js指令吞下来自transclude的事件

时间:2013-03-19 15:51:48

标签: angularjs angularjs-directive

我已经创建了一个使用ngTransclude围绕某些内容创建div包装的指令。请看这个非常简单的示例:http://jsfiddle.net/DHzrr/1/

如果从HTML

中删除组元素
<div ng-controller="TodoCtrl">
  <form ng-submit="addTodo()">
    <input type="checkbox" ng-model="checked">
  </form>
  <div ng-hide="checked">NOT CHECKED</div>
</div>

“ng-hide”监听器正在工作。所以我的group-directive吞下事件发出或隔离$ scope。我怎样才能做到这一点?

我认为只有在指令定义对象中使用scope:true属性时才会创建新的作用域。

1 个答案:

答案 0 :(得分:2)

transclude: true创建一个新的子范围,原型继承自父(TodoCtrl)范围。您可以通过以下三种方式之一解决问题:

  1. (推荐)绑定到父作用域ng-model="obj.checked"和控制器中定义的对象属性:$scope.obj = {checked: false}
    fiddle
  2. 使用ng-model="$parent.checked"
  3. 使用函数更新父级的模型:将ng-change="toggle()"添加到input,然后在控制器上定义一个函数:$scope.toggle = function() { $scope.checked = !$scope.checked }
  4. 另请参阅What are the nuances of scope prototypal / prototypical inheritance in AngularJS?指令项“4. transclude: true