2017-04-01 34 views
-1

这是我尝试做: 的Json从 “urldatas”:

[{ "name" : "John" }] 

JS文件:

var app = angular.module('app', []); 
    app.service('service', function($http, $q){ 
     this.getDatas = function() { 
      var datas = $http.get('urldatas', {cache: false}); 
      return $q.all({datas}); 
     }; 
    app.controller('FirstCtrl', function($scope, service, $http, $timeout) { 
     var vm = this; 
     vm.loadData = function() { 
      var promise = service.getDatas(); 
      promise.then(function (data) { 
       $scope.datas = data.datas.data; 
       console.log($scope.datas); 
      }); 
     }; 
    vm.loadPackages = function() { 
      var url = "urlPackages" + datas.name; 
      $http.get(url).then(function (response) { 
      $scope.MyPackages = response.data; 
     }); 
}; 

所以我尝试动态地在$变更网址http.get getPackages中,通过getDatas的值,但我不知道该怎么做。控制台中的网址显示“urlPackagesundefinded”。提前感谢您的答复。

+0

作为服务写入会造成编译错误。这个问题涉及'getPackages',但代码中没有这样的功能。 **消除与问题无关的任何问题**如果您的问题不是关于编译器错误,请确保没有编译时错误。 – georgeawg

回答

0

$q将多个请求作为数组发送,而不是作为对象发送。除去花括号并添加一个括号

var datas = $http.get('urldatas', {cache: false}); 
return $q.all([datas]); 

,因为你引用删除controllerAs范围的变量,并通过vm引用它们。

then承诺响应数据来自下data财产

var promise = service.getDatas(); 
promise.then(function (response) { 
    vm.datas = response.data.datas.data; 
    console.log(vm.datas); 
}); 
+0

我认为可能还有一个范围问题需要处理。 –

+0

@Raphael Rafatpanah是的,你是对的只是编辑它 –

+1

当'$ http'已经返回一个promise时,使用'$ q.all()'是一种反模式 – charlietfl