【发布时间】:2013-07-28 18:24:00
【问题描述】:
我正在学习 Angular 教程,并且阅读了大量内容。但是,我很难找到这个问题的答案。或者,我可能想错了,希望有人能帮助我!
非常简单的例子:
var phones = [
{"name": "Nexus S",
"snippet": "Fast just got faster with Nexus S.",
"age": 0},
{"name": "Motorola XOOM™ with Wi-Fi",
"snippet": "The Next, Next Generation tablet.",
"age": 1},
{"name": "MOTOROLA XOOM™",
"snippet": "The Next, Next Generation tablet.",
"age": 2}
];
function PhoneListCtrl($scope) {
$scope.phones = phones;
$scope.orderProp = 'age';
}
我在上面表示的是来自该控制器外部的数据源。我有一个现有的缓存功能,可以根据需要对服务器进行 XHR 处理以获取新数据。
假设模型随后发生了变化:
phones[3] = {"name": "Something new from the server",
"snippet": "Here is some new incoming data",
"age": 5};
如何告诉 Angular PhoneListCtrl 控制器模型已更新?如果您自己对此进行测试并更新数组,Angular 不会意识到更改,因此不会更新 DOM。
我知道$http 服务,但在我当前的架构中,我不能在控制器中使用 $http 来获取数据——控制器需要询问我的外部函数已经为数据编写了代码,当数据随后发生变化时,我需要某种方式告诉 Angular 的控制器。
感谢您的帮助和洞察力!
【问题讨论】:
-
我想你在找
$scope.$apply() -
$scope 在控制器之外不可用。
-
注入 $timeout 服务,并将您的代码包装在其中。然后您的代码将在应用块中运行。 docs.angularjs.org/api/ng.$timeout
标签: javascript angularjs xmlhttprequest