当另一个范围更改其值时,我有一个我想要更改的变量。
$scope.switch = true;
var thing;
if ($scope.switch == false) {
thing = "givesFalse";
}
else {
thing = "givesTrue";
};
this.thingscope = thing;
因此,当我将$scope.switch
值更改为false时,this.thingscope
应输出givesFalse
。为了更改范围值,我使用ng-click:
<div ng-controller="myCtrl as myCtrl" ng-app="myApp">
{{myCtrl.thingscope}}
<br>
<a ng-click="switch = !switch">{{switch}}</a>
</div>
但即使我可以看到范围确实更新,变量thing
似乎也不会同时更新。你可以看到工作的plunkr here。提前谢谢!
答案 0 :(得分:3)
您有两个选择:
0 - 自动:使用Watch
$scope.$watch('switch', function () {
$scope.thing = $scope.switch ? "givesTrue" : "givesFalse";
});
1 - 手动:使用可更改两个值的自定义功能。
ng-click="switch = !switch"
将其更改为:
ng-click="customFunction()"
在控制器中定义:
$scope.customFunction = function () {
$scope.switch = !$scope.switch;
$scope.thing = $scope.switch ? "givesTrue" : "givesFalse";
}
答案 1 :(得分:1)
重点是,当您的控制器实例化时,您的Controller代码将只执行一次。
如果您希望它响应更改,则需要使用$watch
。
$scope.$watch('switch', function(newSwitchValue, oldSwitchValue) {
if ($scope.switch == false) {
$scope.thing = "givesFalse";
}
else {
$scope.thing = "givesTrue";
}
});
在体系结构和性能非常重要的真实应用中,我建议您直接通过 ng-click 调用函数。
ng-click="onClickSwitch()"
然后在 $ scope 中定义函数 onClickSwitch()。
$scope.onClickSwitch = function() {
$scope.switch = !$scope.switch;
[code as above]
}