如何在Controller中将其更改为构造

时间:2015-01-13 17:41:25

标签: angularjs this angular-promise

我试图将Controller用作AngularJS中的结构。 为此,我使用控制器的这个来存储表格中的值。

在控制器中,值由promise设置。承诺然后让它拥有它不等于Controller,所以我通过使用angular.bind(this,function(){})构造来改变它。 Ť

但是如果我在promise中更改了类似this.contact的内容,那么Controller的this.contact将不会改变。如何更改此值?

示例:

angular.module('starter')
  .controller('ContactViewController', function($scope, $log, Address) {
    this.contact = {
      type: 'contact'
    };


    Address.get(1).then(angular.bind(this, function(rec) {
      $log.log('rec:',rec);
      this.contact = rec;     // does NOT work
    }));

    $scope.$on('contact.create', angular.bind(this, function(event, contact) {
      this.contact = contact; // this DOES work
    }));
  }); 


angular.module('starter')
  .factory('Address', ['$q', '$rootScope', function($q, $rootScope) {
      get : function(id) {
        var deferred = $q.defer();
        localDB.get(id, function (err, doc) {
            if (err) {
              deferred.reject(err);
            } else {
              $rootScope.$apply(function () {
                deferred.resolve(doc);
              });
            }
          });
        return deferred.promise;
      }
    }
  }]);

2 个答案:

答案 0 :(得分:0)

我发现了错误。它确实按预期工作。承诺的内容将更改为控制器范围内的承诺。

错误位于已连接的视图中,但未反映更改。

答案 1 :(得分:0)

this随上下文发生变化,并且在promise函数闭包内有不同的值。

社区通常建议将this的值捕获到控制器开头的变量中: