1

Ich versuche, eine Variable zwischen einem Controller und einer Funktion zu teilen. Aber ich erhalte eine Fehlermeldung von der Steuerung, das sage:Angular: Nicht in der Lage, auf Variablen in Controller mit Service zuzugreifen

TypeError: Cannot read property 'getSet' of undefined 

ich durch zahlreiche Tutorials gegangen sind, aber nicht wissen, wo ich falsch gehen. Mein Service Code ist wie folgt:

app.service('shareData', function() { 

    var selected = ["plz", "print", "something"]; 

    var putSet = function(set) { 
     selected = set; 
    }; 

    var getSet = function() { 
     return selected; 
    }; 

    return { 
     putSet: putSet, 
     getSet: getSet 
    }; 
}); 

ich in der Lage bin selected von meiner Funktion wie folgt definiert zu erreichen:

setDisplay = function($scope, $mdDialog, shareData) { 

    console.log(shareData.getSet()); // this is working 

    $scope.selected = shareData.getSet(); 
    $scope.hide = function() { 
     $mdDialog.hide(); 
    }; 
    $scope.cancel = function() { 
     $mdDialog.cancel(); 
    }; 
    $scope.answer = function(answer) { 
     $mdDialog.hide(answer); 
    }; 
}; 

Mein Controller das ist wie:

app.controller('topicController', ['$scope', '$http', '$mdDialog', 'shareData', 
function ($scope, $http, $mdDialog, $mdToast, shareData) { 

    console.log(shareData.getSet()); // NOT WORKING 

}]); 

Antwort

3

Sie haben extra $mdToast in Ihrer topicController Controller Werksfunktion, müssen Sie es entfernen.

Der Grund dafür war nicht, ist, haben Sie 4 Abhängigkeit im Array wie ['$scope', '$http', '$mdDialog', 'shareData', function & erwähnt dann verwenden Sie ihre Instanz innerhalb der Funktion neben DI-Array. Innerhalb dieser Funktion hatten Sie tatsächlich 5 Abhängigkeiten, wobei $mdToast extra. Also hinter der Szene was passiert ist $scope der Funktion halten einen Wert von '$scope' DI-Array ebenfalls Sie gehen von rechts nach links. Aber wenn es um $mdToast (in der Controller-Funktion) geht, hielt es einen Wert von 'shareData' (von DI-Array) & dann der nächste Parameter shareData nichts bekommen.

app.controller('topicController', ['$scope', '$http', '$mdDialog', 'shareData', 
     function ($scope, $http, $mdDialog, shareData) { //<--removed $mdToast 
    console.log(shareData.getSet()); 
    } 
]); 

HINWEIS: Sie verwenden DI inline array annotation, so dass die Reihenfolge, in der Abhängigkeit in der Matrix injiziert werden, in derselben Reihenfolge sollten Sie injizieren dann in darunter liegende Fabrik-Funktion.

+0

Vielen Dank! Du hast meine kostbare Zeit gerettet! Aber ich bekomme nicht den genauen Grund, warum ich nicht in der Lage war, darauf zuzugreifen und zu entfernen $ mdToast tat die Magie –

+0

@jAYANTYADAV Ich aktualisierte meine Antwort mit ausführlich erklären .. Ich denke, es würde Ihnen helfen. Danke :) –

+0

Danke nochmal! Übrigens, was ist ein DI-Array? Ich meine Vollform. –