我有一块手表,在那块手表中,我检查了一些值,然后更新另一块。这是我的代码
scope.$watch(function () {
return userfactory.getUser();
}, function (newValue, oldValue) {
if (newValue.User) {
scope.domainuser = newValue.User.DomainUser;
scope.isGuardian = scope.domainuser.Category === 'Guardian';
if (scope.isGuardian && scope.mymessage !== undefined) {
angular.forEach(newValue.User.DependantUsers, function (value, key) {
if (scope.mymessage.OnBehalfOf === value.DomainUser.UserName) {
scope.mymessage.backGround = globalColorsArray[key];
console.log(scope.mymessage);
}
});
}
}
});
从调用指令的地方传递mymessage。如果我有一个函数可以说一个单击按钮,如果我更新它,它会更新它。
奇怪的是,控制台日志中包含更新的属性。但是在模板上它没有得到它。
我的模板有很多东西,但问题在这里
<span class="parent-child-color-scheme" ng-show="isGuardian" ng-class="mymessage.backGround"></span>
显然,如果我尝试更新任何属性,它在手表内部不起作用。它没有生效。
这就是我在指令
中的内容return {
restrict: 'E',
scope: {
mymessage: "=message",
frontpage: "=",
inbox: "="
}, controller: function ($scope) {
答案 0 :(得分:1)
scope
函数中的watch
似乎指的是与模板不同的scope.$watch(function () {
return userfactory.getUser();
}, function (newValue, oldValue, scope) {
...
。
如果使用监视器监听器功能的完整参数列表(如here所述),则可以确保使用正确的范围:
}, function (newValue, oldValue, wScope) {
...
wScope.mymessage.backGround = globalColorsArray[key];
为避免使用您的参数名称进行遮蔽,您甚至可以使用其他名称,例如:
(?<!&)(?:\b(?:nbsp|quot|divide)|#[0-9a-f]+);