Angularjs将值返回给控制器

时间:2016-04-05 03:40:30

标签: javascript angularjs variables return return-value

angular.module('App').factory('API', ['someAPI', function(someAPI){
  var service = {};
  service.loadInfo= loadInfo;
  return service;
  function loadInfo(id) {
      var list = [];
      var items= [];
      someAPI.list.get({id: id}).$promise.then(function (result) {
        items= result;
        if (items.length === 0) {
            items= 'No results';
        } else {
          for (var i=0; i<items.length; i++) {
            list.push(items[i].name);
          }
        }
        console.log('List:' + list); **//This print out 'List: a, b, c, d' in console**
      })
      console.log('List:' + list); **//This print out nothing**
      return list;
    }
  }
]);

//Controller
angular.module('App').controller('ProductCtrl', function($scope, API) {
    $scope.loadInfo = function (id) {
      $scope.list = API.loadInfo(id);
      console.log($scope.list); // This print out undefined
    }
}

这可能是一个愚蠢的问题,在我的服务中,变量内部有些问题&#39;函数可以访问,但控制器得到一个未定义。欣赏是否有任何机构可以解释我。谢谢!

4 个答案:

答案 0 :(得分:0)

@James在您的控制器中,您需要将$ scope传递给您的函数(这称为依赖注入),简单来说就是将对象传递给函数。希望它有所帮助!

答案 1 :(得分:0)

在someAPI.list.get({id:id})之前立即返回列表。$ promise已解决。你需要以承诺的方式做到这一点。另一个问题是您的本地变量名为列表,但您返回列表

我建议你在服务中做一下

return someAPI.list.get({id: id}).$promise.then(function (result) {
    items= result;
    if (items.length === 0) {
        items= 'No results';
    } else {
      for (var i=0; i<items.length; i++) {
        list.push(items[i].name);
      }
    }
    return list;
  })
}

并将move.then部分放到你的控制器上。

$scope.loadInfo = function (id) {
  someAPI.loadInfo(id).then(function (result) {
    $scope.list = result;
  });
}

答案 2 :(得分:0)

修改了依赖项并重写了工厂调用。

 //Controller
    angular.module('App').controller('ProductCtrl', function(API,$scope) {
        $scope.loadInfo = function (id) {

        API.loadInfo(id)
                 .success(function (data, status, headers, config) {
                    $scope.list = data;
                     console.log($scope.list);

                 }).error(function (e, status, headers, config) {
                     //log error here
                 });
    }

答案 3 :(得分:0)

试试这个,它会在ajax完成它的过程时更新你。

$scope.$watch('list',function(val){
      console.log(val);
});