Angular $ http可以在浏览器中使用,但不能在设备上运行 - 离子

时间:2014-09-05 13:22:34

标签: javascript angularjs http angularjs-scope factory

我有一个工厂返回一个对象,调用一个包含JSON的内部资源,如下所示:

.factory('cardFactory', function ($q, $http) {
  return {
    getOtherStuff: function () {
      var deferred = $q.defer(),
        httpPromise = $http.get('/static/cards.json');

      httpPromise.then(function (response) {
        deferred.resolve(response);
      }, function (error) {
        console.error(error);
      });

      return deferred.promise;
    }
  };
});

在我的控制器中,我称之为:

 var cardSuccess = function(data, status, headers, config) {
    $scope.cards = data.data;
  };

  cardFactory.getOtherStuff()
    .then(cardSuccess, cardError);

在填充的浏览器$ scope.cards中,但在设备上它不会填充。

任何想法为什么?

3 个答案:

答案 0 :(得分:1)

嗯..,不确定。

我在Ionic app中以不同的方式使用它,效果很好。

.factory('cardFactory', function ( $http ) {
    var promise;
      var cards = {
        getOtherStuff: function() {
          if ( !promise ) {
            // $http returns a promise, which has a then function, which also returns a promise
            promise = $http.get( '/static/cards.json' ).then(function (response) {
              // The then function here is an opportunity to modify the response
              // The return value gets picked up by the then in the controller.
              return response.data;
            });
          }
          return promise; // Return the promise to the controller
        }
      };
    return cards;
 })

然后,在控制器上,通过以下方式调用它:

$scope.getData = function() {

  // Call the async method and then do stuff with what is returned inside our own then function
  cardFactory.getOtherStuff().then(function(d) {
    $scope.cards= d;
  });
}

$ scope.getData();

希望它有所帮助。

[编辑:]可能是$ http.get网址,是相对的吗?你试过绝对的网址吗?

答案 1 :(得分:0)

将$ scope.cards = data.data替换为“$ scope.cards = data”

var cardSuccess = function(data, status, headers, config) {
    $scope.cards = data;
};

答案 2 :(得分:0)

尝试删除网址中包含$ http的前导斜杠。尝试使用' static / cards.json'而不是' /static/cards.json'

我实际上遇到了同样的问题,这对我来说已经解决了。希望它有所帮助!