我有这个......
<script> var num = 22;</script>
然后在控制器块内...
<span>{{somenumber}}</span>
在控制器......
$scope.somenumber = num;
这一切都按预期工作。
如果num变量的值发生变化,我将如何更新它?所以,我有一些代码(来自socket.io或AJAX)将num更改为65.现在,它仍然说22。
答案 0 :(得分:3)
我要查看this
num
是基本类型(Number)。因此,当您将其分配给$scope
时,您需要将其复制。您需要做的是引用。我按照以下方式修复它。
<script>var value = {num: 22} </script>
$scope.value = value;
<span> {{value.num}} </span>
如果您的ajax呼叫不是通过$http
。(在角度之外 - 无论您设置value.num
的哪个位置),您都需要调用摘要周期。最简单的方法是使用像$timeout
这样的角度服务。
将范围视为
$scope
HAS 模型而不是$scope
AS 模型
答案 1 :(得分:0)
<强>控制器强>
$scope.somenumber = num;
$scope.$watch(function() {
return num;
}, function(newValue, oldValue) {
$scope.somenumber = newValue;
});
// fake external change to the 'num' variable
setTimeout(function() {
num = 33;
$scope.$apply();
}, 3000);
以下是一个工作示例:http://plnkr.co/edit/rL20lyI1SgS6keFbckJp?p=preview
如果您的外部更改发生在单个控制器的范围之外,我会在$rootScope
回调中使用run
:
angular.module('exampleApp', []).run(function($rootScope) {
// same as above, just with $rootScope
});