私はUI-Router for Angularを使用しています。私はサイドバーとメインのビューを分離しています。今私は、サイドバーのビューで行ういくつかのアクションの後、メインビューでいくつかのクラスを変更する必要があります。AngularJSで1つのコントローラと2つのビューを通信
だから、これは私のコードです:
設定
.state('app.area', {
url: '/area/:areaId',
views: {
'@': {
template: require('./app/generic/genericWithSidebar.html'),
controller: 'AreaCtrl'
},
'[email protected]': {
template: require('./app/area/_area.html'),
controller: 'AreaCtrl',
controllerAs: 'CTRL',
},
'[email protected]': {
template: require('./app/area/_sidebar.html'),
controller: 'AreaCtrl',
controllerAs: 'CTRL',
}
},
コントローラ
class AreaCtrl {
constructor($scope) {
"ngInject";
this.$scope = $scope;
this.$scope.descriptionIsActive = false;
}
showAreaDescription() {
this.$scope.descriptionIsActive = !this.$scope.descriptionIsActive;
}
}
export default AreaCtrl;
とビュー、サイドバーのために、メイン
// sidebar view
<span ng-click="CTRL.showAreaDescription()">show more</span>
// main view
<div ng-class="{'active': CTRL.descriptionIsActive}"></div>
コントローラ間で通信する必要がありますが、コントローラが1つあります。
各ビューは、それぞれ独自のスコープを持つ新しいAreaCtrlインスタンスを初期化することに注意する必要があります。 – charlietfl
@charlietflどうすればよいですか?私はビューのコントローラ定義を削除し、親のためだけに残すべきですか? – Lukas
おそらく.....はい。しかし、実際には十分にアプリについては知られていません – charlietfl