J'ai besoin d'appeler la fonction dans un autre contrôleur dans angular js.Comment cela est-il possible, aidez-moi, merci d'avance
Code:
app.controller('One', ['$scope',
function($scope) {
$scope.parentmethod = function() {
// task
}
}
]);
app.controller('two', ['$scope',
function($scope) {
$scope.childmethod = function() {
// Here i want to call parentmethod of One controller
}
}
]);
La communication entre les contrôleurs s'effectue par les méthodes $emit
+ $on
/$broadcast
+ $on
.
Donc, dans votre cas, vous souhaitez appeler une méthode du contrôleur "Un" dans le contrôleur "Deux", la manière correcte de procéder est la suivante:
app.controller('One', ['$scope', '$rootScope'
function($scope) {
$rootScope.$on("CallParentMethod", function(){
$scope.parentmethod();
});
$scope.parentmethod = function() {
// task
}
}
]);
app.controller('two', ['$scope', '$rootScope'
function($scope) {
$scope.childmethod = function() {
$rootScope.$emit("CallParentMethod", {});
}
}
]);
Lorsque $rootScope.$emit
est appelé, vous pouvez envoyer n’importe quelle donnée en tant que second paramètre.
Je n'utiliserais pas la fonction d'un contrôleur à un autre. Une meilleure approche serait de déplacer la fonction commune vers un service, puis d’injecter le service dans les deux contrôleurs.
Si le contrôleur two
est imbriqué dans le contrôleur One
.
Ensuite, vous pouvez simplement appeler:
$scope.parentmethod();
La volonté angulaire recherche pour la fonction parentmethod
commençant par la portée actuelle et jusqu’à atteindre la rootScope
.
Vous pouvez utiliser des événements pour fournir vos données. Code comme ça:
app.controller('One', ['$scope', function ($scope) {
$scope.parentmethod=function(){
$scope.$emit('one', res);// res - your data
}
}]);
app.controller('two', ['$scope', function ($scope) {
$scope.$on('updateMiniBasket', function (event, data) {
...
});
}]);
La meilleure approche pour vous de communiquer entre les deux contrôleurs consiste à utiliser des événements.
Voir la documentation scope
Dans cette caisse, $on
, $broadcast
et $emit
.
Si vous souhaitez exécuter la fonction parentmethod du contrôleur parent dans un contrôleur enfant, appelez-la:
$scope.$parent.parentmethod();
Vous pouvez l'essayer ici