tti*_*ani 10 angularjs cordova angularjs-routing
我在使用AngularJS v1.2.0和PhoneGap/Cordova Android应用程序进行路径查找时遇到问题.html5mode(true)通过<base href="."/>在index.html中设置然后更改$routeProvider.when('/')为,我已经相当远了$routeProvider.when('/android_asset/www/index.html').在那之后,我能够redirectTo('login')达到$routeProvider.when('/login')并按templateUrl: 'static/partials/login.html'预期进行渲染.
我$location.path('/login');遇到的问题是,如果我尝试从我的Javascript代码重定向到登录页面,则会找到路由但是templateUrl加载失败并出现insecurl异常.
我已经尝试使用新的angular-sanitize模块将文件列入白名单来访问://但这没有用.
我怎样才能$location.path()做同样的事情,redirectTo以便加载部分?或者还有其他方法可以解决这个问题吗?
更新:我通过在路径函数之后添加对replace()的调用来向前推进,例如:
$location.path('/login').replace();
但这似乎是一个黑客,它仍然导致其他路由中的templateUrl失败并出现相同的异常.
关于可能出错的任何想法?是不是html5mode(true)只是在这个时候用Phonegap不起作用,解决这个问题的唯一方法是将它设置为false并将hashtags添加到每个路径(就像在angular phonegap 种子项目中完成的那样)?
tti*_*ani 14
为了将来参考,这就是我设法解决问题的方法:
html5mode(true)由于insecurl我报告的问题,AngularJS目前似乎不支持Cordova应用程序内部.我要做的就是添加
var h5m = (typeof html5Mode !== 'undefined') ? html5Mode : true;
$locationProvider.html5Mode(h5m);
Run Code Online (Sandbox Code Playgroud)
这使我有可能index.html使用全局变量在PhoneGap中显式设置html5Mode :
<script>
var html5Mode = false;
</script>
Run Code Online (Sandbox Code Playgroud)所以现在$location.path('/login')和redirectTo: 'login'工作,但在HTML文件中的链接,不.为了让那些在PhoneGap中工作,禁用html5Mode,我必须#/在每个链接前添加,例如<a href="#/login">login</a>.
这使PhoneGap工作,但打破了使用History API的网页html5Mode(true).最后一个难题是添加<base href="/"/>到网页的index.html(并将其从PhoneGap项目的index.html中删除.)所以现在即使我有一个链接#/login在网页上说,我到达网址http://example.com/login,地址栏中看不到任何哈希值.
**
所以,最后我有纪录API在我的网页的工作和历史API中的PhoneGap项目(那里实在没有必要对历史API,因为没有地址栏)禁用.唯一的缺点是#/我必须在每个模板html文件中添加额外的内容,但与使用所有相同的html和javascript文件进行网络和移动的能力相比,这是一个小麻烦.
| 归档时间: |
|
| 查看次数: |
3983 次 |
| 最近记录: |