【问题标题】:$rootScope is not defined$rootScope 未定义
【发布时间】:2017-11-17 18:25:08
【问题描述】:

我试图在多个地方和多个控制器中使用 cookie 值,但我收到错误提示 $rootScope is not defined

代码如下:

capApp.controller('cookieCtrl', ['$scope','$cookies', function($scope, $rootScope, $cookies) {
  // set variable for nav
  $rootScope.cookieSet = $cookies.user_id;
}]);

capApp.controller('mainController', function($scope, $location) {  
  $scope.user_id = $rootScope.cookieSet; // set global var
});

有没有更好的方法来做到这一点?基本上我想要站点范围内可用的 cookie 值

【问题讨论】:

    标签: javascript angularjs cookies dependency-injection


    【解决方案1】:

    您错过了在两个控制器

    中添加$rootScope 依赖项

    代码

    capApp.controller('cookieCtrl', ['$scope','$rootScope', '$cookies', 
      function($scope, $rootScope, $cookies) {
      // set variable for nav
      $rootScope.cookieSet = $cookies.user_id;
    }]);
    
    capApp.controller('mainController', ['$scope', '$location', '$rootScope', 
      function($scope, $location, $rootScope) {  
      $scope.user_id = $rootScope.cookieSet; // set global var
    });
    

    确保array annotation of dependency injection 确保它在进行 JavaScript 缩小时不会破坏代码。

    旁注:- 不要使用$rootScope 来共享应用程序常用功能/数据,请使用服务/工厂来共享

    【讨论】:

    【解决方案2】:

    你没有在 mainController 中注入 $rootScope

    capApp.controller('mainController', function($scope,$rootScope, $location) {  
      $scope.user_id = $rootScope.cookieSet; // set global var
    });
    

    更新:

    首先创建一个充当控制器之间桥梁的服务:

    1) addCookie 用于添加cookieset。

    2) getCookie 用来获取cookieset。

    capApp.factory('user', function() {
      var cookieSet;
    
      var addCookie = function(val) {
          cookieSet=val;
      }
    
      var getCookie = function(){
          return cookieSet;
      }
    
      return {
        addCookie : addCookie,
        getCookie : getCookie 
      };
    
    });
    
    capApp.controller('cookieCtrl', ['$scope', 'user', '$cookies', function($scope, user, $cookies) {
      // set variable for nav
      user.addCookie($cookies.user_id);
    }]);
    
    capApp.controller('mainController', function($scope, $location,user) {  
      $scope.user_id =user.getCookie(); // set global var
    });
    

    【讨论】:

    • 为什么你把服务语法和工厂混在一起,你应该在使用服务时使用this而不是本地var,并且不应该返回对象,看看这个stackoverflow.com/a/28262966/2435473跨度>
    • 我个人喜欢你的服务方式 +1 :)
    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多