2016-06-09 73 views
0

我是AngularJS的新手,看起来很简单。 我想在空白页面上重用AngluarJS LocalStorageModule (没有UI,只执行一次并重定向)。调用Angularjs模块一次

这里是我的尝试看起来像:

<html> 
 
<head> 
 
<script src="../bower_components/angular/angular.js"></script> 
 
<script src="../bower_components/angular-local-storage/dist/angular-local-storage.js"></script> 
 
<script> 
 
\t var myApp = angular.module('myApp', [ 'LocalStorageModule' ]) 
 
\t .factory(
 
\t \t \t function(localStorageService) { 
 
\t \t \t \t 
 
\t \t \t \t localStorageService.set('username', 'some-user'); 
 
\t \t \t \t localStorageService.set('token', 'somevalue')); 
 
\t \t \t \t window.location = location.protocol + '//' + location.hostname 
 
\t \t \t \t \t \t + (location.port ? ':' + location.port : ''); 
 
\t \t \t }); 
 
</script> 
 
</head> 
 
<body ng-app="myApp">You are being redirected 
 
</body> 
 
</html>

不幸的是,工厂函数不会被调用。 如果我用config替换工厂,函数会被调用,但localStorageServiceProvider不会公开我需要的set()方法。

我的练习的目的是在真正的AngularJS应用程序的本地浏览器存储中存储值,浏览器在上述代码执行后被重定向到正确的位置,以便它可以读取和使用存储的值。

+0

我不能说我明白你的问题正确,但如果我是你首先需要正常'的.config()'这样的模块注入可以注入'LocalStorageModule'。之后,您可以使用'.run()'运行您需要运行一次的代码。另外,使用'$ location'进行重定向等。记得在'.run()'函数调用中注入'$ location'和'LocalStorageFactory'。 '.factory()'函数用于创建自己的工厂,而不是重用现有的模块/工厂。 –

+0

@AleksandarBencun我没有将localStorageModule注入到.config()中。我改为使用localStorageModuleProvider。我猜测这是不同的事情。 为什么$ location比我的方法更可取?如果你注意到这不是一个真正的AngularJS应用程序,我只是想重用一个AngularJS模块。 感谢与.run()的提示,请看看。 –

+0

那么,文档中明确指出,您需要使用'var myApp = angular.module('myApp',['LocalStorageModule']);'进行初始模块注入。之后,在注入功能模块时需要使用'localStorageServiceProvider',例如'.run(function(localStorageServiceProvider){/ * code * /});' –

回答

1

你需要注入的模块,配置它,事后使用它。

//load and config the modules 
var myApp = angular.module('myApp', [ 'LocalStorageModule' ]); 
myApp.config(function (localStorageServiceProvider) { 
    localStorageServiceProvider 
    .setPrefix('samePrefixAsTheTargetApp'); 
}); 
//this function is called only once 
myApp.run(function(localStorageService){ 
    localStorageService.set('username', 'some-user'); 
    localStorageService.set('token', 'somevalue')); 
    window.location = location.protocol + '//' + location.hostname 
        + (location.port ? ':' + location.port : ''); 
}) 
0

你想要做的是使用ngStorage模块及其工厂$ localStorage和$ sessionStorage在浏览器上本地保存数据。

然后重定向保存前值:

$sessionStorage.someVal ="blah" 

和重定向后,阅读:

$scope.val = $sessionStorage.someVal 
+0

我的主要应用是使用LocalStorageModule。这就是我试图使用它的原因,这是为了提供最大的合规性。 你是说ngStorage模块与LocalStorageModule 100%兼容? (我无法触及主应用程序) –

+0

根据文档“如果localStorage不受支持,库将默认为cookie,而此行为可被禁用。”你有没有检查过是否有任何cookie被设置为名称? – Don

+0

我不认为他在使用ngStorage。这是OP中链接的一个不同的库。 –