我是Angular的初学者,我正在尝试从Angular工厂的方法中获取值。我一直在努力解决这个问题,希望有人可以提供帮助! 很抱歉,当我从Word文档中复制时,代码的格式很差。
我的工厂代码......
driverPortalApp.factory('asideFactory', [
'$http', '$q', '$rootScope', function ($http, $q, $rootScope) {
return {
//This is the function I want to get the value from.
//It will return a 'true' or 'false' string.
getLastCheckboxValue: function () {
return $http.get('Home/ReadPageLog')
.then(function (result) {
//this did not work as when I tried to reference it in the controller I get 'undefined'.
$rootScope.doNotShowChecked = result.data;
});
}
};
}
]);
我的控制器代码......
driverPortalApp.controller('asideController', [
'$scope', '$aside', 'asideFactory', 'asideContent', '$rootScope', '$http', function ($scope, $aside, asideFactory, asideContent, $rootScope, $http) {
if (asides.length > 0) {
//I need to get the value from getLastCheckboxValue here
doNotShowChecked = asideFactory.getLastCheckboxValue().success(result);
[0](); //Open the initial pop-over
}
]);
答案 0 :(得分:1)
您使用工厂/服务的方法几乎正确。您需要更改处理promise
的方式。
服务中的方法返回promise callback
,在$rootScope.doNotShowChecked
成功后将值赋给http get
。
因此,如果要在控制器中访问它,则需要在promise回调中访问它,如:
asideFactory.getLastCheckboxValue().then(function(result){
// access $rootScope.doNotShowChecked here
});
或者,如果您返回http结果,则是您的承诺回调,而不是将其分配给$rootScope
,如
return $http.get('Home/ReadPageLog')
.then(function (result) {
return result.data;
});
然后它将在promise回调中提供,
asideFactory.getLastCheckboxValue().then(function(doNotShowChecked){
var returnValue = doNotShowChecked;
});
HTH