简体   繁体   English

子状态更改时,Angular重新加载父控制器

[英]Angular reload parent controller on child state change

I am a newbie to angular JS and IONIC. 我是有角JS和IONIC的新手。

I have left side menu: - Menu 1 - Menu 2 - Menu 3 我有左侧菜单:-菜单1-菜单2-菜单3

And right side menu dynamically change based on the selected left menu. 右侧菜单会根据所选的左侧菜单动态更改。

I successfully did this. 我成功做到了。 But, the problem is when i change to other Menu, my right side menu won't be updated before i refresh the page (using F5). 但是,问题是,当我更改为其他菜单时,在刷新页面(使用F5)之前,不会更新右侧菜单。

Whats wrong with my code: 我的代码有什么问题:

controller.js controller.js

angular.module('starter.controllers', [])

    .controller('AppCtrl', function ($state, $scope, $stateParams) {
        var source = $stateParams.source;
        $scope.title = source;
        $scope.data = {items: []};

        if (source == 'Menu1') {
           $scope.data.items.push({url: source + '/AAA', label: "AAA"});
           $scope.data.items.push({url: source + '/BBB', label: "BBB"});
           $scope.data.items.push({url: source + '/CCC', label: "CCC"});
        }
        if (source == 'Menu2') {
           $scope.data.items.push({url: source + '/EEE', label: "EEE"});
        }
        if (source == 'Menu3') {
           $scope.data.items.push({url: source + '/FFF', label: "FFF"});
        }
    })

    .controller('NewsListCtrl', function ($scope, $stateParams) {

    })
;

app.js app.js

.config(function ($stateProvider, $urlRouterProvider) {
        $stateProvider

            .state('app', {
                url: "/app/:source/:channel",
                templateUrl: "templates/layout.html",
                controller: 'AppCtrl'
            })
            .state('app.newsList', {
                url: "/news-list",
                views: {
                    'menuContent': {
                        templateUrl: "templates/news-list.html",
                        controller: 'NewsListCtrl'
                    }
                }
            })

        // if none of the above states are matched, use this as the fallback
        $urlRouterProvider.otherwise('/app/Menu1/AAA/news-list');

    });

layout.html 的layout.html

<ion-side-menus enable-menu-with-back-views="false">>
    <ion-side-menu-content>
        ...
    </ion-side-menu-content>

    <ion-side-menu side="left">
        <ion-content>
            <ion-list>
                <ion-item menu-close href="#/app/Menu1/AAA/news-list">
                    AAA
                </ion-item>
                <ion-item menu-close href="#/app/Menu2/EEE/news-list">
                    EEE
                </ion-item>
                <ion-item menu-close href="#/app/Menu3/FFF/news-list">
                    FFF
                </ion-item>
            </ion-list>
        </ion-content>
    </ion-side-menu>

    <ion-side-menu side="right">
        <ion-content>
            <ion-list>
                <ion-item menu-close ng-repeat="item in data.items" href="#/app/{{item.url}}/news-list">
                    {{item.label}}
                </ion-item>
            </ion-list>
        </ion-content>
    </ion-side-menu>
</ion-side-menus>

Since the parent controller doesn't get re-created when the child state changes, you could have the parent controller listen for $stateChangeSuccess and update the menu based on the state params: 由于在子状态更改时不会重新创建父控制器,因此您可以让父控制器侦听$ stateChangeSuccess并根据状态参数更新菜单:

$rootScope.$on('$stateChangeSuccess', 
function(event, toState, toParams, fromState, fromParams){ ... })

https://github.com/angular-ui/ui-router/wiki#state-change-events https://github.com/angular-ui/ui-router/wiki#state-change-events

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM