Функция вызова от другого контроллера Angular Js
Я новичок в использовании angular js, и я объявил много контроллеров, и теперь я хочу, чтобы пользовательская функция одного контроллера была в другом контроллере. вот мой пример кода.
app.controller('Controller1',function($scope,$http,$compile){
$scope.test1=function($scope)
{
alert("test1");
}
});
app.controller('Controller2',function($scope,$http,$compile){
$scope.test2=function($scope)
{
alert("test1");
}
});
app.controller('Controller3',function($scope,$http,$compile){
///
});
Теперь я хочу вызвать функцию test2 внутри контроллера3.
Может кто-нибудь помочь..
Спасибо в Avance...:)
Ответы
Ответ 1
Вы не можете вызвать метод с контроллера в контроллере. Вам нужно будет извлечь метод, создать службу и вызвать ее. Это также отделит код друг от друга и сделает его более проверяемым.
(function() {
angular.module('app', [])
.service('svc', function() {
var svc = {};
svc.method = function() {
alert(1);
}
return svc;
})
.controller('ctrl', [
'$scope', 'svc', function($scope, svc) {
svc.method();
}
]);
})();
Пример: http://plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p=preview
Ответ 2
Лучший способ - написать службу и использовать эту службу в обоих контроллерах. см. документацию Сервисная документация
Если вы действительно хотите получить доступ к методу контроллера с другого контроллера, выполните следующие действия:
испускание события по охвату:
function FirstController($scope) { $scope.$on('someEvent', function(event, args) {});}
function SecondController($scope) { $scope.$emit('someEvent', args);}
Ответ 3
Контроллер - это конструктор, он создаст новый экземпляр, если, например, используется в директиве.
Вы все равно можете делать то, что хотели, считая, что ваши контроллеры находятся в одной области, просто выполните:
Обратите внимание, что они должны быть в той же области, могут работать, если дочерняя область не изолирована.
Определение директивы:
{
controller: Controller1,
controllerAs: 'ctrl1',
link: function($scope) {
$scope.ctrl1.test1(); // call a method from controller 1
$scope.ctrl2.test2(); // created by the directive after this definition
$scope.ctrl3.test3(); // created by the directive after this definition
}
}
....
{
controller: Controller2,
controllerAs: 'ctrl2',
link: function($scope) {
$scope.ctrl1.test1(); // created earlier
$scope.ctrl2.test2(); // ...
$scope.ctrl3.test3(); // created by the directive after this definition
}
}
....
{
controller: Controller3,
controllerAs: 'ctrl3',
link: function($scope) {
$scope.ctrl1.test1();
$scope.ctrl2.test2();
$scope.ctrl3.test3();
}
}
Это должно работать.