1

这可能很容易,但尽管如此。我的控制器中有一个 http 调用,我在其中加载了一个 json 文件。我想根据结果更新我的 html 中的变量。它显然会更新 JS 中的变量(console.log),但不会更新 html 中的变量。有没有办法将 $apply 用于结果或类似的?还有什么好用的?这是一个(不)工作的 plnkr

JS:

    function SomeController($http){
  this.someValue = 'initial';
  $http.get('test.json').then(function (data) {
    this.someValue="changed";
    console.log("get request "+this.someValue);
  });
}

app.controller('someController', SomeController);

HTML:

<div ng-controller="someController as some">
      <p>{{some.someValue}}</p>
    </div>
4

2 回答 2

1

每当我们创建一个函数时,它都有自己的this(上下文)。在您的情况下this,您使用的内部$http.get成功函数不是函数的this(上下文)SomeController。您必须将SomeController函数上下文保留在self变量中,然后在$http.get函数的成功回调中使用该变量,以便this将其视为全局变量。

控制器

function SomeController($http){
  var self =this;
  self.someValue = 'initial';
  $http.get('test.json').then(function (data) {
    self.someValue="changed";
    console.log("get request "+this.someValue);
  });
}

演示 Plunkr

于 2016-09-24T09:30:39.763 回答
0

thisin yourcontroller和 in$http是不同的,因为它们位于不同的范围内,因此请分配this另一个变量,例如_this并使用它。

尝试一下

function SomeController($http){
  var _this = this;
  _this.someValue = 'initial';
  $http.get('test.json').then(function (data) {
    _this.someValue="changed";
    console.log("get request "+_this.someValue);
  });
}
于 2016-09-24T09:30:56.820 回答