Каков предпочтительный способ соединения/объединения двух директив вместе? У меня есть контроллер с двумя директивами, первая директива - это элемент выбора, после выбора опции вторая директива должна обрабатывать выбранное значение элемента.AngularJS - связывание/связывание двух директив вместе
App код:
var app = angular.module('plunker', []);
app.controller('MainCtrl', function() {
var sharedData = { selectedId: '' };
var vm = this;
vm.sharedData = sharedData;
});
app.directive('directiveA', ['$compile', function($compile) {
return {
restrict: 'E',
scope: {
selectedId: '='
},
template: '<select data-ng-model="vm.sharedData.selectedId" data-ng-options="currentSelect.Id as currentSelect.Name for currentSelect in vm.sharedData.availableSelects track by currentSelect.Id"><option value="">Select option</option></select><p>Directive A, selected ID: {{vm.sharedData.selectedId}}</p>',
bindToController: true,
controllerAs: 'vm',
controller: function() {
vm = this;
vm.sharedData = {
availableSelects: [
{Id:1, Name: 'Option 1'},
{Id:2, Name: 'Option 2'},
{Id:3, Name: 'Option 3'},
{Id:4, Name: 'Option 4'}
]
}
vm.logMessage = logMessage;
function logMessage(selectedId) {
console.log('directiveA: ' + selectedId);
}
},
link: function($scope, elem, attr, ctrl) {
attr.$observe('selectedId', function(selectedId) {
ctrl.logMessage(selectedId);
});
}
};
}]);
app.directive('directiveB', ['$compile', function($compile) {
return {
restrict: 'E',
scope: {
selectedId: '='
},
template: '<p>Directive B, selected ID: {{vm.sharedData.selectedId}}</p>',
bindToController: true,
controllerAs: 'vm',
controller: function() {
vm = this;
vm.logMessage = logMessage;
function logMessage(selectedId) {
console.log('directiveB: ' + selectedId);
}
},
link: function($scope, elem, attr, ctrl) {
attr.$observe('selectedId', function(selectedId) {
ctrl.logMessage(selectedId);
});
}
};
}]);
HTML код:
<!DOCTYPE html>
<html data-ng-app="plunker" data-ng-strict-di>
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link href="style.css" rel="stylesheet" />
<script data-semver="1.4.1" src="https://code.angularjs.org/1.4.1/angular.js" data-require="[email protected]"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl as vm">
<p>MainCtrl, selected ID: {{vm.sharedData.selectedId}}</p>
<directive-a data-selected-id="vm.sharedData.selectedId"></directive-a>
<directive-b data-selected-id="vm.sharedData.selectedId"></directive-b>
</body>
</html>
Вот пример Plunker:
http://plnkr.co/edit/KVMGb8uAjUwD9eOsv72z?p=preview
Что я делаю неправильно?
С наилучшими пожеланиями,
У вас есть две директивы, для которых требуется изолированный объект на том же элементе, который не разрешен. Это дублирующий вопрос. http://stackoverflow.com/questions/20470662/angularjs-two-directives-on-one-element –
ЕСЛИ я правильно понял ваше требование, думаю, вам нужно использовать require для ссылок между двумя контроллерами, http: // stackoverflow .com/questions/30673459/using-require-in-directive-to-require-a-parent-controller/30673703 # 30673703 –
Хм, http://stackoverflow.com/questions/20470662/angularjs-two-directives- on-one-element имеет две директивы для одного элемента (), но здесь у меня есть две независимые директивы для одной переменной. – Sassa