Comment inclure / injecter des fonctions qui utilisent $ scope dans un contrôleur dans angularjs?
Je suis en train d'essayer d'inclure une bibliothèque de fonctions, tenue dans une usine, dans un contrôleur.
Semblables à des questions de ce genre:
Créer des fonctions de contrôleur
Mon contrôleur principal ressemble à ceci:
recipeApp.controller('recipeController', function ($scope, groceryInterface, ...){
$scope.groceryList = [];
//...etc...
/* trying to retrieve the functions here */
$scope.groceryFunc = groceryInterface; //would call ng-click="groceryFunc.addToList()" in main view
/* Also tried this:
$scope.addToList = groceryInterface.addToList();
$scope.clearList = groceryInterface.clearList();
$scope.add = groceryInterface.add();
$scope.addUp = groceryInterface.addUp(); */
}
Puis, dans un autre .fichier js, j'ai créé l'usine groceryInterface. J'ai injecté de cette usine dans le contrôleur ci-dessus.
Usine
recipeApp.factory('groceryInterface', function(){
var factory = {};
factory.addToList = function(recipe){
$scope.groceryList.push(recipe);
... etc....
}
factory.clearList = function() {
var last = $scope.prevIngredients.pop();
.... etc...
}
factory.add = function() {
$scope.ingredientsList[0].amount = $scope.ingredientsList[0].amount + 5;
}
factory.addUp = function(){
etc...
}
return factory;
});
Mais dans ma console, je reçois des ReferenceError: $scope is not defined
, etc. Évidemment, je devine que cela a à voir avec le fait que je suis en utilisant
at Object.factory.addToList$scope
dans mes fonctions au sein de l'usine. Comment puis-je résoudre ce problème? J'ai remarqué que dans beaucoup d'autres exemples que j'ai regardé, personne n'a jamais utilise $scope
au sein de leur usine de fonctions. J'ai essayé d'injecter $scope
comme un paramètre dans mon usine, mais que la plaine n'a pas de travail. (par exemple,recipeApp.factory('groceryInterface', function(){
)
Toute aide est très apprécié!
source d'informationauteur LazerSharks
Vous devez vous connecter pour publier un commentaire.
Votre usine ne pouvez pas accéder à votre
$scope
puisqu'il n'est pas dans le même champ d'application.Essayez plutôt ceci:
Sinon, vous pouvez essayer d'utiliser un plus que l'approche orientée objet:
Vous ne pouvez pas utiliser
$scope
dans une usine comme il n'est pas défini. Au lieu de cela, dans votre usine de fonctions de modifier les propriétés de l'objet de l'usine est de retour, par exempleces seront ensuite transmises à votre
$scope
variableCe n'est pas la réponse exacte à cette question, mais j'ai eu des problèmes similaires que j'ai résolu par un simple passage de $portée comme un argument à une fonction dans mon usine. Afin de ne pas être à la normale$, mais $portée à la fois la fonction dans l'usine est appelé.