我试图将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;
}
}
}]);
答案 0 :(得分:0)
我发现了错误。它确实按预期工作。承诺的内容将更改为控制器范围内的承诺。
错误位于已连接的视图中,但未反映更改。
答案 1 :(得分:0)
this
随上下文发生变化,并且在promise函数闭包内有不同的值。
社区通常建议将this
的值捕获到控制器开头的变量中: