首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从非角码访问角$cookies

从非角码访问角$cookies
EN

Stack Overflow用户
提问于 2015-07-18 11:38:41
回答 3查看 940关注 0票数 2

我有一个test模块,它将cookie isTesting设置为true。

代码语言:javascript
复制
app.controller('test_page',
    ['$scope', '$window', 'userService', 'flash', '$cookies',
function($scope, $window, userService, flash, $cookies) {
    helper.initCommonScope($scope, $window, userService, flash)

    $scope.refreshShownHidden = function() {
        $scope.showTurnOffTest = $cookies.get('isTesting')
        $scope.showTurnOnTest = ! $cookies.get('isTesting')
    }

    $scope.turnOnTest = function() {

        $cookies.put('isTesting', true)
        $scope.refreshShownHidden()
        helper.turnOnTest()
    }
    $scope.turnOffTest = function() {
        $cookies.put('isTesting', false)
        $scope.refreshShownHidden()
        helper.turnOffTest()
    }

    $scope.refreshShownHidden()

}])

在helper.js里,我有

代码语言:javascript
复制
exports.havePermission = function(access, resource, userService, entity) {
    //Note: In debugging, we can grant client helper all access, and test robustness of server
    if (angular.$cookies.isTesting)
        return true
    return permission.havePermission(access, resource, userService.isAuthenticated(), entity, userService.user)
}

但是$cookies是不可用的,因为helper.js不是任何角模块的一部分,因此没有DI可用。如何访问isTesting值?

我试过使用window.isTesting,但是当我刷新页面或转到其他页面时,它不会持久。所以cookie是个更好的选择

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-18 12:11:50

您可以使用角的注入器访问角模块和服务以外的角度应用程序。

AngularJS码

代码语言:javascript
复制
angular.module('app', ['ngCookies']).
  controller('ctrl', ['$cookies', function($cookies) {
    $cookies.put('isTesting', true);
  }]);

非角码

代码语言:javascript
复制
helper = {
  getCookies: function() {
    // Create new injector for ngCookies module
    var $injector = angular.injector(['ngCookies']);

    // Inject $cookies to some function and invoke it
    $injector.invoke(['$cookies', function($cookies) {
      alert($cookies.get('isTesting'));
    }]);
  }
}

代码语言:javascript
复制
<html ng-app='app'>

  <head>
    <script data-require="angular.js@1.4.3" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular.js"></script>
    <script data-require="angular-cookies.js@1.4.3" data-semver="1.4.3" src="https://code.angularjs.org/1.4.3/angular-cookies.js"></script>
    <script src="script.js"></script>
    <script src="helper.js"></script>
  </head>

  <body ng-controller="ctrl">
    <button onclick="helper.getCookies()">Click Me</button>
  </body>

</html>

柱塞:http://plnkr.co/edit/jur9A6d69ViiJqiFgopD?p=preview

票数 3
EN

Stack Overflow用户

发布于 2015-07-18 12:08:19

代码语言:javascript
复制
var cookies = angular.injector(['ngCookies']).get('$cookies');

它创建了一个新的$cookies服务实例,所以如果您在整个应用程序中使用它,最好将它导出到全局。

票数 2
EN

Stack Overflow用户

发布于 2015-07-18 11:47:01

这不是AngularJS的目的。您应该尝试将所有内容保存在您的AngularJS代码中。但是,可以在AngularJS中设置任何全局变量:

代码语言:javascript
复制
app.controller('test_page',
    ['$scope', '$window', 'userService', 'flash', '$cookies',
function($scope, $window, userService, flash, $cookies) {
    angular.$cookies = $cookies;
    // or window.$cookies = $cookies;
    helper.initCommonScope($scope, $window, userService, flash)

然后你可以随时随地访问$cookies。它使某些事情变得更容易,但不太安全(任何其他脚本也可以访问它,它可以造成冲突,等等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31490774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档