私は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;
}]);