Привет, я пытаюсь создать системную панель, в которой elem.bind ('change, ...) в дочерней директиве изменяет «выбранную» родительскую директиву: http://plnkr.co/edit/gc35fuUiJVUhHF4QMAwv?p=previewВызов функции родительской директивы в дочерней директиве
(function(angular) {
'use strict';
angular.module('docsTabsExample', [])
.directive('myTabs', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
controller: function($scope) {
var panes = $scope.panes = [];
$scope.select = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
};
$scope.next = function(pane) {
select(panes[panes.indexOf(pane)+1]);
};
this.addPane = function(pane) {
if (panes.length === 0) {
$scope.select(pane);
}
panes.push(pane);
};
},
templateUrl: 'my-tabs.html'
};
})
.directive('myPane', function() {
return {
require: '^myTabs',
restrict: 'E',
transclude: true,
scope: {
title: '@'
},
link: function(scope, element, attrs, tabsCtrl) {
tabsCtrl.addPane(scope);
},
templateUrl: 'my-pane.html'
};
})
.directive('pf-data', function() {
return {
require: '^myPane',
restrict: 'AEC',
scope: {
title: '@'
},
link: function(scope, element, attrs, tabsCtrl) {
console.log("hi");
element.bind('change', function() {
scope.next();
console.log("switch panes");
});
}
};
});
})(window.angular);
(Когда вы выбираете пол (мужчина или женщина), я хочу, чтобы перейти к следующей панели в последовательности, но я предполагаю, что из-за проблем Scope (я довольно ржавый с угловой), что он никогда попадает в связанный атрибут дочерней директивы.
Любые идеи?
@Michael_Hays настроил пример так, чтобы он использовал обновленные требования и область действия: [link] (http://plnkr.co/edit/gc35fuUiJVUhHF4QMAwv?p=preview). Пример изменен из документов AngularJS по директивам , Также вы можете объяснить, почему вы не можете просто сделать ctrls [1] .next(), почему он должен применяться к обоим областям, и почему вам нужно делать $ scope. $ Apply. –
Вам вообще не нужны обе области: вам нужен только тот, который я добавил, но я не хотел уменьшать функциональность, которая уже присутствовала в случае необходимости контроллера myPane. Что касается '$ scope. $ Apply' - при запуске внешних событий они возникают за пределами угловой архитектуры, поэтому они не будут запускать какие-либо привязки, которые вы, возможно, настроили, - ваше представление не будет обновляться. В некоторых случаях Angular предоставляет обработчики '$ apply'-wrapped,' ng-click' и т. Д., Но только если вы присоедините этих обработчиков с помощью угловых директив. Это то, что наскучит всех нас время от времени. –
Позвольте мне проверить ваш пример и убедиться, что он работает. Я вернусь. –