从Angular Factory方法获取值

时间:2016-07-27 19:26:24

标签: angularjs

我是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
     }
 ]);

1 个答案:

答案 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