私はtutorialの後に、AngularJSのsidenav
でドロップダウンメニューを実装しています。私は私のレイアウトが提供されている例とは異なるので、アプリケーションでコンポーネントを使用しました。親コントローラの要素にアクセスできない
ul
には、オブジェクトに格納されている名前が入力されていますが、機能が失敗しています。私は、ディレクティブの親要素のコントローラを見つけることができないためにエラーを解決するために絞り込んでいます。私はコンソールでcontroller
をログインすると
var controller = $element.parent().controller();
、それがされているコントローラの機能を表示する必要があります
vm.isOpen = isOpen;
vm.toggleOpen = toggleOpen;
vm.autoFocusContent = false;
vm.menu = mainNavService;
vm.status = {
isFirstOpen: true,
isFirstDisabled: false
};
をしかし、その代わりに、それは戻って、空のオブジェクト。それはコントローラを使用するのではなく、モジュール上でAngularのコンポーネントメソッドを使用していて、コントローラプロパティを使用しているからですか?コントローラにアクセスしようとすると、それは何のプロパティを返さないのはなぜ
質問
?
app.component('mainnav', {
templateUrl: 'p3sweb/app/components/app/views/main-nav.htm',
controller: ['userService', 'mainNavService', function(userService, mainNavService){
var vm = this;
vm.isOpen = isOpen;
vm.toggleOpen = toggleOpen;
vm.autoFocusContent = false;
vm.menu = mainNavService;
vm.status = {
isFirstOpen: true,
isFirstDisabled: false
};
function isOpen(section) {
console.log('menu.isSectionSelected(section)')
return menu.isSectionSelected(section);
}
function toggleOpen(section) {
console.log(menu.toggleSelectSection(section))
menu.toggleSelectSection(section);
}
}]
})
app.directive('menuToggle', [ '$timeout', function($timeout){
return {
scope: {
section: '='
},
templateUrl: 'p3sweb/app/components/app/views/main-nav-li.htm',
link: function($scope, $element) {
var controller = $element.parent().controller(); //FAILS
$scope.isOpen = function() {
return controller.isOpen($scope.section)
};
$scope.toggle = function() {
console.log(controller.toggleOpen())
controller.toggleOpen($scope.section);
};
}
};
}])
であなたは 'mainnavを宣言しようとしなかったことを交換することを置き換える見つけるどこ'コンポーネントの代わりにディレクティブとして? –
'mainnav'の' menuToggle'への参照を 'scope: {section: '='、context: '='}'のように渡さないのはなぜですか? あなたの ' – AdityaParab
一般に、コンポーネントでは、親コントローラにアクセスするための受け入れられた方法は 'require'プロパティを使うことです。詳細については、[AngularJS開発者ガイド - インターコンポーネント通信](https://docs.angularjs.org/guide/component#intercomponent-communication) – georgeawg