0

Итак, вот пример кода:Ионные - AngularJS: вызов метода через шаблон вне контроллера

<div ng-controller="MyControllerOne"> 
    <span ng-click="foobar()">Click Me!</span> 
</div> 

Могу ли я из этого шаблона, без изменения контроллера, вызовите функцию Foobar() в MyControllerTwo:

.controller('MyControllerOne', function($scope) { 
    //some code 
}) 
.controller('MyControllerTwo', function($scope) { 
    // method I wanna call 
    function foobar(){ 
    } 
}) 
+0

Вы можете воспользоваться услугами здесь. Добавьте метод в службу, который обрабатывает любые постоянные данные, которые также должны быть в вашем сервисе – aliasav

ответ

1

Пока не симпатичным решение, это технически возможно ... иш.

Если обновить HTML для:

<div ng-controller="MyControllerOne"> 
    <span ng-controller="MyControllerTwo as mct" ng-click="mct.foobar()">Click Me!</span> 
</div> 

Тогда вы должны получить ваши ожидаемые результаты.

1

Вы можете вызвать метод, который находится в другом контроллере из шаблона, введя в контроллер функцию «$ controller». Ниже приведена демонстрация и код.

Вы можете посмотреть демо здесь: http://plnkr.co/edit/oBEKxamgJv0uDVsJJwth?p=preview

HTML:

<body ng-controller="MainCtrl"> 
    <div ng-click="fooBar()">Click Me!</div> 
    </body> 

JS:

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope, $controller) { 
    $controller('SubCtrl', {$scope: $scope}); 
}); 

app.controller('SubCtrl', function($scope) { 
    $scope.fooBar = function() { 
    alert('second controller'); 
    }; 
}); 
1

Довольно старый вопрос, но если какой-нибудь один все еще ищет альтернативный ответ .. Должно быть возможно использование $ emit или $ broadcast.

Как из ControllerOne:

$rootScope.$broadcast('callToFoobat',{}); 

А потом из ControllerTwo:

$scope.$on('callToFoobat', function(){ 
    // whatever you want, so why not a call to foobar 
}) 

Просто грубое решение. Возможно, будет более элегантным или легче, чем просто $ rootScope. $ Broadcast. И, возможно, подумайте о том, чтобы остановить распространение, когда это необходимо.