【问题标题】:$scope cannot set property on $stateChangeStart$scope 无法在 $stateChangeStart 上设置属性
【发布时间】:2015-01-25 22:27:34
【问题描述】:

您好,我是 angularjs 新手,我正在使用 $rootScope 来更改 $stateChangeSuccess 上的 $scope 变量。问题是,我收到一条错误消息,上面写着“TypeError:无法设置属性 'show' of null”。这是我的代码片段

    // unhide this view whenever visited
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState,     fromParams) {
        $scope.$parent.show = false;
        alert($scope.$parent.show);
        return $scope.$parent.show;

});

和 html ...

<div class="row">
    <div class="dl-horizontal" id="information">
        <div class="col-md-8 col-md-offset-2">

        <!-- route veiw, hide the child view initailly -->
        <div ui-view ></div>
    </div>

    <div class="col-md-8 col-md-offset-2" ng-hide="show">

基本上,我想在退出子状态时取消隐藏父视图。 $scope 变量有一个值并且代码有效,只是我收到了这个错误消息。有关如何解决此错误的任何想法?

谢谢

【问题讨论】:

    标签: angularjs rootscope


    【解决方案1】:

    如果您想避免使用根范围,可以将 $on 添加到包含您希望更改的属性的 $scope。

    例如:

    controller: function($scope, $stateParams, carsDataService) {
        $scope.model = {};
        $scope.model.cars = carsDataService.getCars();
        $scope.pageState = { selectedCarId: null };
    
        $scope.$on('$stateChangeStart', function(event, toState, toParams,    fromState, fromParams){
            $scope.pageState.selectedCarId = toParams.id;
        });
    }
    

    【讨论】:

      【解决方案2】:

      您无法访问 $rootScope 的侦听器内的子范围。

      只需在$rootScope 上设置您的属性,如果您的作用域不是隔离的,则可以从子作用域访问它。

      【讨论】:

      • 感谢您的回复。 “在 $rootScope 上设置你的属性”是什么意思?
      • $scope.$parent.show = false;代替$rootScope.show = false;
      猜你喜欢
      • 2014-12-31
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多