2

我试图弄清楚ng-show当状态改变时如何更新我的变量。在我的默认index.html文件中,我有:

<div id="searchBar" ng-show="searchBar" ng-controller="mainController"></div>

由于这不是我的page1模板的一部分,searchBar因此在状态更改时不会更新。变量实际上正在正确更改,但ng-show不知道这一点。

我知道有角度,但是有人对在控制器中更改时ng-show注意到变化有什么建议吗?searchBar

var routerApp = angular.module('app', ['ui.router'])
    .service('MainShared', function () {
        var MainShared = this;
        MainShared.searchBar = false;
    })
    .controller('mainController', function($scope, MainShared) {
        $scope.searchBar = MainShared.searchBar;
    });

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

    $locationProvider.html5Mode(true);
    $urlRouterProvider.otherwise('/page1');

    $stateProvider
        .state('page1', {
            url: '/page1',
            templateUrl: 'pages/templates/page1.html', 
            controller: 'page1' 
        });
});

routerApp.controller('page1', function($scope, $http, $state, MainShared) {

    MainShared.searchBar = true;

});

编辑:让我们知道,从下面的答案中,您不需要服务来执行此操作。

4

2 回答 2

4

使用$rootScope

.controller('mainController', function($scope, $rootScope) {
    console.log($rootScope.searchBar);
});


routerApp.controller('page1', function($scope, $rootScope, $http, $state) {
    $rootScope.searchBar = true;
});
于 2015-04-28T02:04:18.370 回答
0
parentScope.show = 1;
childScope.show = 2;

不会工作。(第二条语句不会更新父范围内的值)

parentScope.object = {};
parentScope.object.show = 1;
childScope.object.show = 2;

将工作。(第二条语句将更新父范围内的值)

因此,只需将“搜索栏”放在范围内的其他对象中。

于 2015-04-28T02:14:01.473 回答