【问题标题】:how to read json file before calling controller using resolve?如何在使用解析调用控制器之前读取 json 文件?
【发布时间】:2015-11-29 10:52:20
【问题描述】:

我正在尝试在控制器调用之前读取 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>',

预期输出是 Welcome Naveen

【问题讨论】:

  • 在调用abc.loadData 时,我没有看到您正在传递successCallbackerrorCallback 并且另外resolve 函数返回promise 对象。但是在这里你使用了回调,这可能是它背后的另一个原因..
  • 好的,我会尝试更新你
  • 没有收到请更新我的插件
  • 我在这里看不到 plunkr 链接

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


【解决方案1】:

正如我在 cmets 中所说,Resolve 函数应该始终返回一个承诺。所以不要使用callbacks you should return promiseobjectfrom theabcserviceloadData`函数。

因此,要将您的服务 loadData 函数转换为 promise,您需要将 .success.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

【讨论】:

    【解决方案2】:

    你必须提供成功和失败的回调

    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 {}
         } 
    
        }
      }
    

    【讨论】:

    • 在您的 plunkr 中,您错过了 data 属性,因此您没有返回 res.data,而是返回了 res
    猜你喜欢
    • 2017-03-13
    • 2016-11-27
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2019-10-02
    相关资源
    最近更新 更多