如何在使用resolve调用控制器之前读取json文件?

时间:2015-11-29 10:52:21

标签: angularjs angularjs-directive angularjs-scope angular-ui-router

我试图在控制器调用之前读取json文件并获取数据。但是我无法显示输出为什么?

我这样做了一家工厂

.factory('abc',function($http){

  return{
    loadData:function(successCallback,errorCallbak){
      return $http.get('data.json').success(successCallback).error(errorCallbak)
    }

  }


})

我使用了像

那样的解析功能
resolve: {
        user: function (abc) {
         return abc.loadData

        }
      }

但它没有在HTML中显示输出为什么?

template: '<b>Welcome {{home.user.name}}!</b>',

预期输出欢迎Naveen

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,解决功能应该总是返回一个承诺。因此,而不是使用callbacks you should return promise对象from the abc service loadData`函数。

因此,要将您的服务loadData功能转换为承诺,您需要更改.success&amp; .error函数到.then函数,它返回一个promise对象($http.get方法返回promise),如.then(successCallback, errorCallbak)

<强>工厂

.factory('abc', function($http) {
  return {
    loadData: function(successCallback, errorCallbak) {
      //returned promise object using `.then` as $http.get function return promise
      return $http.get('data.json').then(successCallback, errorCallbak)
    }
  }
})

<强>解析

resolve: {
    user: function(abc) {
      return abc.loadData(success, error);

      function success(res) {
        console.log(res)
        return res.data;
      }

      function error(res) {
        return []; // or whatever default data, maybe {}
      }

    }
}

Demo Plunkr

答案 1 :(得分:0)

您必须提供成功和失败回调

http://plnkr.co/edit/HBDMMb7CWAN9BXTDz6fb?p=preview

resolve: {
    user: function (abc) {
     return abc.loadData(success, error);
     function success (res) {
       return res.data;
     } 
     function error (res) {
       return []; // or whatever default data, maybe {}
     } 

    }
  }