/ /コントローラからangularjsのファクトリにデータを取得する方法-javascript、angularjs、angularjs-directive

angularjsでコントローラからファクトリへのデータを取得する方法 - javascript、angularjs、angularjs-directive

私はAngularjs Worldの初心者です。 AngularjsコントローラーからAngularjs 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」のハードコードされた値を含む配列です。

このコードを実行すると、「Error:MyController is undefined」というエラーが発生しました。はいの場合、コントローラーからデータを取得することは可能ですか?

回答:

回答№1は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;
}]);