繁体   English   中英

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

[英]Why does my $watch only ever fire once?

我正在考虑一些小部件并且$watch表达式在一个文件中完美地工作但是现在我将相关的控制器部分移动到一个新的控制器中并将标记转换为新的html并且$watch在初始化后正好触发一次但不是编辑相关输入中的输入。

JS:

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

包装器的HTML:

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

partials/getRecipientWidget.html HTML:

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

我怀疑有一些范围伏都教正在进行中? 我离开了ng-init以明确我想要实现的目标:构建一个明显更复杂,可重用的小部件,在这个实例中可以在$scope.cert作为其recipient

这可能是因为ng-include将建立在包含的HTML一个新的继承范围,因此$scope.addressInput在你的控制器是不是同一基准$scope.addressInputgetRecipientWidget.html

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

ng-include创建新范围。

试试这个

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

Plunker的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM