指令不会更新父母范围

时间:2014-08-21 11:15:07

标签: angularjs angularjs-directive angularjs-scope

所有代码http://jsfiddle.net/mato75/o9e3cb56/

指令:

scope: { attrs: '=?' }

main ctrl:

this.val = { val: '1', title: '2' };

$scope.$watch(angular.bind(this, function () { return this.val.title }), function () {
     doSomethingOnChange()
});

HTML:

<div dirc x-attrs="ctrl.val">

当我在指令中更改标题时,不会调度主控制器监视。

1 个答案:

答案 0 :(得分:1)

以下是我认为您打算执行的示例:http://plnkr.co/edit/pRih6ldttukJ9ZwrWNsF?p=preview

我想知道为什么要使用这种设置$ watch的方法:

$scope.$watch(angular.bind(this, function () { this.val.title }), function () {
    doSomethingOnChange()
});

在我的代码中,我使用了更简单的格式:

$scope.$watch('ctrl.val.title', function() {
    console.log('The watch was dispatched!');
});

当然,在这种情况下,您将控制器耦合到您在视图中选择的名称。也许这就是你想避免的?在任何情况下,演示都有效,所以我希望有所帮助。

更新:我实际上刚刚意识到您的代码无效的真正的原因。在$ watch函数中,您忘记了return语句:

$scope.$watch(angular.bind(this, function () { return this.val.title }), function () {
    doSomethingOnChange()
});

现在应该可以了。