0

我一直遇到一个问题,它导致与控制器范围变量的定义不一致。

正如您可能知道的那样,使用controllerAs语法,您必须将所有变量与实例附加到控制器函数中,如下所示:

angular.module('angularJsInternationalizationApp')
  .controller('MainCtrl', function (SampleService) {
    this.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];

    this.translatedFromService = '';
    SampleService.getTranslation().then(function(data){
        this.translatedFromService = data;
    });
  });

现在的问题是this.translatefDromService不能从任何服务的成功错误函数或事实上任何其他函数更新,因为它将 this 作为新函数的实例而不是控制器。

在这种情况下可以做什么。

我使用了一种解决方案,您将其标记为 vm。 var vm = this在控制器的开头,但除此之外还有什么解决方案吗?

干杯!

4

1 回答 1

1

您有 2 个选项:

1)使用该vm = this方法,保持this与控制器上下文的链接:

angular.module('angularJsInternationalizationApp')
  .controller('MainCtrl', function (SampleService) {
    var vm = this;
    vm.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];

    vm.translatedFromService = '';
    SampleService.getTranslation().then(function(data){
        vm.translatedFromService = data;
    });
  });

2)使用处理程序上的bind() 方法,这会将调用函数的上下文修改为控制器的this

angular.module('angularJsInternationalizationApp')
  .controller('MainCtrl', function (SampleService) {
    this.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];

    this.translatedFromService = '';
    SampleService.getTranslation().then(function(data){
        this.translatedFromService = data;
    }.bind(this));
  });
于 2016-02-22T07:24:56.803 回答