为什么我的$ watch只会发射一次?

时间:2015-03-17 22:09:31

标签: javascript angularjs angularjs-ng-include

我将一些小部件分解出来并且$watch表达式在一个文件中完美地工作但是现在我将相关的控制器部分移动到一个新的控制器中并将标记移动到一个新的html和{{ 1}}在初始化后恰好触发一次,但在相关输入中编辑键入时则不会触发。

JS:

$watch

包装器的HTML:

app.controller('getRecipientWidgetController', [ '$scope', function($scope) {
    console.log("controller initializing")
    var testReceivingAddress = function(input) {
        console.log("change detected")
    }
    $scope.$watch("addressInput", testReceivingAddress)
} ])

<ng-include src="'partials/getRecipientWidget.html'" ng-controller="getRecipientWidgetController" ng-init="recipient=cert"> <!-- ng-init doesn't influence the bug. --> </ng-include> 的HTML:

partials/getRecipientWidget.html

我怀疑伏都教还有一些范围?我离开了<md-text-float ng-model="addressInput"></md-text-float> 以明确我要实现的目标:构建一个明显更复杂,可重复使用的窗口小部件,在此实例中,ng-init可以作为$scope.cert使用。

2 个答案:

答案 0 :(得分:7)

这可能是因为ng-include会在包含的HTML上创建新的继承范围,因此控制器中的$scope.addressInput$scope.addressInput中的getRecipientWidget.html不同/ p>

嗯,这不容易解释,但你应该将ng-controller放在getRecipientWidget.html的HTML中(而不是包含它的上面的div),或者你可以使用诸如something.addressInput之类的对象而不是原始addressInput,它避免了对原始类型(数字/字符串)的引用问题。

答案 1 :(得分:3)

ng-include创建新范围。

试试这个

<md-text-float ng-model="$parent.addressInput"></md-text-float>

Plunker example