我将一些小部件分解出来并且$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
使用。
答案 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>