Я хочу передать метод из контроллера -> директива parent -> child. Я вызываю этот метод из дочернего контроллера, передавая аргументы. Он работает в родительской директиве, но я не могу передавать параметры из дочерней директивы. Ниже приведен код:Метод передачи от родительской к дочерней директиве
http://jsfiddle.net/gurukashyap/e14ff06p/6/
От родительской директивы я получаю следующий ответ в консоли: 'Ctrl метод 123'
Из директивы ребенка: Ctrl метод не определен.
Любая помощь приветствуется.
<div ng-app="MyApp">
<div ng-controller="MyController">
<container data-method="foo(value)"/>
</div>
</div>
var myApp = angular.module('MyApp', []);
myApp.directive('container', function() {
return {
restrict: 'E',
replace: 'true',
scope: {
methodToCall: '&method'
},
template: "<div>" +
"<button ng-click='finish()'>Parent directive</button><child data-method=\"methodToCall(val) \"></child>" +
"</div>",
link: function (scope, element, attrs) {
scope.paragraphs = [];
scope.pushText = function() {
scope.paragraphs.push(scope.textToPush);
scope.textToPush = "";
}
scope.finish = function() {
scope.methodToCall({value: '123'});
}
}
}
});
myApp.directive('child', function() {
return {
restrict: 'E',
scope : {
methodToCall : '&method'
},
template : '<button ng-click = "newMethod()">Child directive </button>',
controller : function($scope) {
$scope.newMethod = function() {
console.log('Test child '+$scope);
//debugger;
$scope.methodToCall({val : 'Testchild'});
}
}
}
});
myApp.controller('MyController', function ($scope, $window) {
$scope.foo = function (textArray) {
console.log('Ctrl method '+textArray)
};
});
спасибо, что решить эту проблему. Аналогичным образом, если мы называем родительскую директиву внутри дочернего элемента рекурсивно. Нужно ли нам следовать той же процедуре. –
Kalava
@Gurukashyap, я не совсем уверен, что вы подразумеваете под рекурсивно - вы имеете в виду, что вы можете иметь глубину N внутренних 'child'-директив? - но, да, вы могли бы что-то подобное, за исключением случаев, когда это действительно рекурсивно, вам, скорее всего, понадобится '' methodToCall ({val: val}) ", чтобы не переопределять локальную переменную из значения' val' to' '. Но если все, что вы делаете, порождает некоторые данные, есть другие способы считать –