【问题标题】:Update angular model outside of the controller更新控制器外部的角度模型
【发布时间】: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


【解决方案1】:

如果您要从外部角度上下文更新数据,您可以使用类似的方法获取定义控制器的元素的范围

angular.element(domElement).scope()

然后使用

$apply 在作用域上定义的方法来推送更新

查看更多详情here

【讨论】:

  • 该死,Angular 能够解决这个问题的方式真是太棒了!这行得通——谢谢!我还有很多阅读和学习要做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2016-08-25
  • 2012-05-11
  • 2013-06-26
相关资源
最近更新 更多