Каков наилучший способ связи между угловыми компонентами и/или директивами. Я использую угловой материал. Я использую ui-router.Как связываться между директивами/компонентами родственного языка в угловом формате 1.5
Я стараюсь, чтобы мои компоненты и директивы были раздельными и не зависели друг от друга.
Я хотел бы реорганизовать, где это необходимо, мои директивы в .component().
У меня есть навигатор, который я разделил в директиву (navBar). В этой навигационной панели у меня есть панель поиска, которую я хотел бы отфильтровать список. Список указан в директиве sibling.
Первоначально у меня была директива navbar (и пыталась использовать ее как .compontent()) вне области MainCtrl, как определено ui-router. Мне это показалось, что навигатор будет относительно последовательным во всем приложении.
Я отложил его, чтобы поместить его в область MainCtrl, где я могу привязать свойства MainCtrl к элементам в моей директиве navBar. Это кажется неправильным, поскольку теперь navBar и fileBrowser связаны с MainCtrl.
Другие варианты я смотрел в:
Использование и область применения $ часы(), чтобы определить свойства на родительском компоненте из компонента NavBar ребенка.. Затем в другом дочернем компоненте fileBrowser, используя scope. $ Watch(), следите за этими изменениями в родительском компоненте и отвечайте соответствующим образом.
Использование службы для хранения данных и передачи данных.
Использование $ emit, $ broadcast events.
Какое наилучшее решение в этой ситуации сохранить мою директиву/компоненты отдельно? Каков наилучший/самый чистый/рекомендуемый способ связи между директивой/компонентами сестры?
Это состояние инициируется Ui-маршрутизатором
main.component.js
angular.module('glossa')
.component('mainComponent', {
controller: MainCtrl,
controllerAs: 'vm',
transclude: true,
templateUrl: 'app/main/main.html'
});
function MainCtrl($scope, nodeSrvc, fileSrvc) {
var vm = this;
vm.selectedFile = {};
vm.fileList = [];
vm.searchText = '';
vm.filteredFiles = [];
activate();
function activate() {
buildFileList();
}
/**
* Queries for all files in db.
*/
function buildFileList() {
fileSrvc.queryAllFiles().then(function(docs) {
vm.fileList = docs;
});
}
}
main.html
//where the input where I filter the list
<navbar-directive></navbar-directive>
<div flex layout="row" >
//where the list is located
<file-browser layout="column"></file-browser>
<tabbar></tabbar>
</div>
<drawer-directive></drawer-directive>
Я хотел Navbar, чтобы отфильтровать список расположенный в директиве sibling или компоненте filebrowser
navbar.directive.js
angular.module('glossa')
.directive('navbarDirective', navBarDirective);
function navBarDirective(fileSrvc) {
var directive = {
restrict: 'E',
replace: true,
controller: NavbarCtrl,
controllerAs: 'navVm',
templateUrl: 'components/navbar/navbar.html',
bindToController: true
};
return directive;
}
navbar.html
<md-toolbar
layout="row"
class="nav-content primary-bg"
md-whiteframe="1"
md-selected-nav-item="currentNavItem"
nav-bar-aria-label="navigation links">
<span flex></span>
<div class="md-toolbar-tools">
<md-input-container md-no-float flex >
<form ng-submit="vm.searchSubmit()">
<input ng-model="vm.searchText" placeholder="Search...">
</form>
</md-input-container>
</div>
</md-toolbar>
Это где список, который я хотел бы, чтобы отфильтровывать расположен.
filebrowser.JS
angular.module('glossa')
.directive('fileBrowser', fileBrowser);
function fileBrowser() {
var directive = {
restrict: 'E',
templateUrl: 'components/filebrowser/filebrowser.html'
};
return directive;
}
filebrowser.html
<md-sidenav
md-component-id="left"
md-is-locked-open="true"
layout="column">
<md-content>
<md-list flex>
<md-list-item ng-repeat="file in vm.filteredFiles = (vm.fileList | filter: vm.searchText)" class="md-2-line">
<md-item-content md-ink-ripple layout="row" layout-align="start center">
<div class="md-list-item-text" layout="column">
<h3>{{file.name}}</h3>
<p>Preview of first few lines of a baseline</p>
</div>
</md-item-content>
</md-list-item>
</md-list>
</md-content>
</md-sidenav>
В этом случае я буду использовать события. – plong0
Я наклонялся к этому, но потом столкнулся с другой ситуацией. Когда я нажимаю на файл в файловом браузере, он должен отображать данные в дочернем состоянии в директиве ''. '' имеет несколько ссылок на разные дочерние состояния, которые будут отображать данные по-разному. Я также могу создавать события, чтобы излучать и транслировать этот выбор файла в это дочернее состояние, но это кажется беспорядочным. Я начинаю чувствовать, что мне не хватает чего-то фундаментального. –
mtmoran