我遇到以下代码问题。我更喜欢控制器作为控制器语法并将数据分配给此而不是$scope.user
。问题是它在下面的情况下不起作用,this.user
的一切都很好,但$scope
在模板中没有显示任何内容。我有什么不对或在这种情况下我需要使用angular.module('services', [])
.factory('current_user', ['$http', '$q', function($http, $q){
var deferred = $q.defer();
$http.get('/api/user').success(function(data){
deferred.resolve(data);
});
return deferred.promise;
}]);
angular.module('controllers', [])
.controller('myUser', ['current_user', '$scope', function(current_user, $scope){
current_user.then(function(data){
this.user = data; #does not work
$scope.user = data; #works fine
})
}]);
<div ng-controller="myUser as myUser">
<p>Current user: {{ user }}</p>
<p>Current user: {{ myUser.user }}</p>
</div>
吗?
$scope.val = parseFloat(($scope.val - 0.01).toFixed(2));
答案 0 :(得分:1)
将回调传递给类似的函数时,无法保证上下文(即this
)符合您的预期。在这种情况下,this
可能指向Promise本身。
要解决此问题,您可以使用回调之外的var ctrl = this
来捕获对控制器的引用:
angular.module('controllers', [])
.controller('myUser', ['current_user', function(current_user){
var ctrl = this;
current_user.then(function(data){
ctrl.user = data;
});
}]);
以上也是将属性附加到$scope
的原因,因为在该上下文中它始终是对控制器的引用。
否则你可以使用bind强制你的承诺回调的上下文成为你的控制者:
angular.module('controllers', [])
.controller('myUser', ['current_user', function(current_user){
current_user.then(function(data){
this.user = data;
}.bind(this));
}]);