如何在angularjs中从控制器获取数据到工厂

时间:2014-03-25 12:50:31

标签: javascript angularjs angularjs-directive

我是Angularjs World的新手。我想从angularjs控制器获取一些数据到Angularjs Factory.Controller和factory在不同的js文件中定义。

来自Factory的

代码(文件名Application.js)

  var app=angular.module('myApp',[])

 app.factory('autoCompleteDataService', [function(MyController) {
    return {
       getSource: function() {
        return  MyController.getFirstName();

      }
   }

}]);

 app.directive('autoComplete', function(autoCompleteDataService) {
    return {
       restrict: 'A',
        link: function(scope, elem, attr, ctrl) {
        $(elem).autocompleteArray(autoCompleteDataService.getSource(), {
        minLength: 2
      });
     }

  }})

控制器代码(文件名称Controller.js)

  function  MyController($scope){
    this.getFirstName= function ()
  {
      var arrayFName=[];
      for(var k=0;k< $scope.MyData.length;k++)
          {
            arrayFName.push($scope.MyData[k].fname);
          }
     return arrayFName;
  }

MyData是包含“fname”

的一些硬编码值的数组

当我运行此代码时出现错误'错误:MyController未定义'。是否可以从控制器获取数据,如果是,那么如何?

1 个答案:

答案 0 :(得分:1)

您应该在工厂中定义源或firstName,然后从控制器设置它。然后可以从使用工厂的其他控制器访问它。

var app=angular.module('myApp',[])

app.factory('autoCompleteDataService', [function () {
    var _source;
    return {
        getSource: function () {
            return _source;
        },
        setSource: function (source) {
            _source = source;
        }
    }
}]);

然后后续的控制器可能就像:

app.controller('someController', ['$scope', 'autoCompleteDataService',
    function ($scope, autoCompleteDataService) {
        $scope.source = autoCompleteDataService.getSource();

        // or even...
        // $scope.getFirstName = autoCompleteDataService.getSource;
    }]);