我有一个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是更好的选择
答案 0 :(得分:3)
您可以使用Angular的注入器访问Angular应用程序之外的Angular模块和服务。
AngularJS代码
/*
* Atomicly increment an index into short_buffer
*/
static inline void short_incr_bp(volatile unsigned long *index, int delta)
{
unsigned long new = *index + delta;
barrier(); /* Don't optimize these two together */
*index = (new >= (short_buffer + PAGE_SIZE)) ? short_buffer : new;
}
非角色代码
angular.module('app', ['ngCookies']).
controller('ctrl', ['$cookies', function($cookies) {
$cookies.put('isTesting', true);
}]);
<强> HTML 强>
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'));
}]);
}
}
答案 1 :(得分:2)
var cookies = angular.injector(['ngCookies']).get('$cookies');
它会创建$cookies
服务的新实例,因此如果您在整个应用中使用它,最好将其导出到全局。
答案 2 :(得分:1)
你试过jquery-cookie吗?
bower/npm install --save jquery-cookie
$scope.refreshShownHidden = function() {
$scope.showTurnOffTest = $.cookie('isTesting')
$scope.showTurnOnTest = ! $.cookie('isTesting')
}
$scope.turnOnTest = function() {
$.cookie('isTesting', true)
//...
}
然后在你的助手中:
exports.havePermission = function(access, resource, userService, entity) {
if ($.cookie('isTesting'))
return true
//...
}
我不建议在这种情况下使用角度,因为你的助手不是角度应用程序。
答案 3 :(得分:0)
这不是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。它使某些事情变得更容易但更不安全(任何其他脚本也可以访问它,它可能会产生冲突等)。