我有一个test模块,它将cookie isTesting设置为true。
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里,我有
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是个更好的选择
发布于 2015-07-18 12:11:50
您可以使用角的注入器访问角模块和服务以外的角度应用程序。
AngularJS码
angular.module('app', ['ngCookies']).
controller('ctrl', ['$cookies', function($cookies) {
$cookies.put('isTesting', true);
}]);非角码
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'));
}]);
}
}<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
发布于 2015-07-18 12:08:19
var cookies = angular.injector(['ngCookies']).get('$cookies');它创建了一个新的$cookies服务实例,所以如果您在整个应用程序中使用它,最好将它导出到全局。
发布于 2015-07-18 11:47:01
这不是AngularJS的目的。您应该尝试将所有内容保存在您的AngularJS代码中。但是,可以在AngularJS中设置任何全局变量:
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。它使某些事情变得更容易,但不太安全(任何其他脚本也可以访问它,它可以造成冲突,等等)。
https://stackoverflow.com/questions/31490774
复制相似问题