我对angularjs很新,我很难找到这个问题。
基本上,我们正在使用工厂为我们的应用程序请求数据。当工厂返回一个promise时,我们希望能够使用在我们的作用域中定义的返回promise中的数据,但它只能在页面上作为文本返回。
例如:我们在控制器中定义了$ scope.name:
app.controller('AccountController',function($scope,Account) {
$scope.name = 'Abby';
$scope.news = [];
Account.getSnapshot().success(function(data) {
$scope.news.push(data);
});
});
所以工厂(getSnapshot)将从$ http请求中返回类似“Hello {{name}}”的内容,如下所示:
app.factory('Account',function($http) {
return {
getSnapshot : function() {
return $http.get('data.php');
}
}
});
是否可以允许工厂从$ scope?
访问/使用{{name}}答案 0 :(得分:0)
您需要使用内部Angular $interpolate
服务:
app.controller('AccountController', function($scope, $interpolate, Account) {
$scope.name = 'Abby';
$scope.news = [];
Account.getSnapshot().success(function(data) {
var text = $interpolate(data)($scope);
$scope.news.push(text);
});
});
答案 1 :(得分:0)
使用$q
和promises
感谢@ dfsq在我的帖子中的答案,与此相似。效果很好。
// Factory method.
app.factory('Account', function($http, $q) {
var data;
return {
getSnapshot: function() {
return data ? $q.when(data) : $http.get('data.json').then(function(response) {
data = response.data;
return data;
})
}
}
});
// Controller method.
app.controller('AccountController', function($scope, Account) {
$scope.name = 'Abby';
$scope.news = [];
Account.getSnapshot().then(function(data) {
$scope.news = data;
});
});