2014-03-25 67 views
0

我是Angularjs世界的新手。我想從angularjs控制器中獲取一些數據給Angularjs Factory.Controller和factory在不同的js文件中定義。從工廠如何從控制器獲取數據到angularjs工廠

代碼(文件名的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; 
    } 

邁德特是陣列包含關於 'FNAME'

一些硬編碼值,當我跑此代碼得到錯誤「錯誤:myController的未定義「。如果是的話,是否可以從控制器獲取數據?

+1

你不想從控制器獲取數據,你想從服務到控制器獲取數據。你也應該在Angular模塊上定義你的控制器:'app.controller('myController',['$ scope',function($ scope){...}])' –

回答

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; 
    }]); 
+0

你能否詳細說明一下? – sar

+0

您設置的方式,您正嘗試在您的服務中調用'getSource',然後調用控制器中的'getFirstName'。你應該在那個控制器中做什麼是'setSource()'(或'setFirstName',這會更有意義)。現在,任何後續請求都不會調用控制器('MyController.getFirstName()'),而是調用服務('autoCompleteDataService.getSource()') – Tom

+0

它不適用於我 – sar

相關問題