Ionic 动态配置url路由的设置
随着Ionic App功能的不断增加,需要路由的url设置就越来越多,不喜欢在config函数中写一堆硬代码,一则不美,二则维护起来也麻烦,能不能把这些数据独立出来呢?
经过查找资料与各种实验,最终找出了可行的方案,在此记录并分享。
1.声明全局性的变量,尤其是 $stateProviderRef变量
var $stateProviderRef = null; var app = angular.module("ionicApp", ["ionic","ui.router", "ionicApp.services", "ionicApp.controllers"]);
2.config函数中设置延迟加载,并初始化变量$stateProviderRef
app.config(function($locationProvider,$stateProvider, $urlRouterProvider)
{
/*
Url replace by dynamic load urls.json 2016.10.25
*/
$urlRouterProvider.deferIntercept();
$urlRouterProvider.otherwise('tab/home');
$locationProvider.html5Mode({enabled: false});
$stateProviderRef = $stateProvider; })
3.在run函数中使用http访问json文件,加载json文件里面的url路径数据,请注意data/urls.json路径,不要写成/data/urls.json,否则真机上无法加载,此处是一坑。
app.run(function ($http, $urlRouter,$state)
{
$http.get("data/urls.json").success(function(data)
{
angular.forEach(data, function (value, key)
{
$stateProviderRef.state(value.name, value.value);
});
/*Configures $urlRouter's listener *after* your custom listener*/
$urlRouter.sync();
$urlRouter.listen();
});
});
对应的urls.json数据内容格式为,每个项目不一样,请根据自己的情况修改对应的数据参数
[
{
"name" : "tabs",
"value" : {
"url": "/tab",
"abstract": true,
"templateUrl": "templates/basic/tabs.html"
}
},
{
"name" : "tabs.home",
"value" : {
"url": "/home",
"views": {
"home-tab": {
"templateUrl": "templates/basic/home.html",
"controller": "HomeController"
}
}
}
},
{
"name" : "tabs.user",
"value" : {
"url": "/user",
"views": {
"user-tab": {
"templateUrl": "templates/user/user.html",
"controller": "UserInfoController"
}
}
}
},
{
"name" : "login",
"value" : {
"url": "/login/:flag",
"templateUrl": "templates/basic/login.html",
"controller": "LoginController"
}
},
{
"name" : "register",
"value" : {
"url": "/register/:flag",
"templateUrl": "templates/basic/register.html",
"controller": "RegisterController"
}
},
{
"name" : "extendPage",
"value" : {
"url": "/extendPage/:link",
"templateUrl": "templates/basic/outerHtmlFrame.html",
"controller": "OuterHtmlFrameController"
}
}
]
然后编译打包发布apk安装测试,实现了根据json文件的配置加载路由,我的app.js文件一下子就清爽了许多。
进一步思考之后,如果我想实现类似腾讯新闻可以配置的方式,即用户自己配置关心的内容(比如娱乐,军事,财经等),那如何实现呢?
思路是在某个app的地方,用户选中了一些关心的内容,然后保存设定到一个json文件中,app启动的时候再去读取这个文件路由,就像上面的步骤一样。
此处实现的关键点是用户设置后路由马上能否生效的问题,经测试可行。
4.在按钮中设置一个按钮,事件就是将路由加载到$stateProvider变量中
$scope.addUrl = function()
{
var url = {
"name" : "testUrl",
"value" : {
"url": "/testUrl",
"templateUrl": "templates/basic/testUrl.html",
"controller": "TestUrlController"
}
};
console.log("add dynamic url");
$stateProviderRef.state(url.name, url.value);
};
此url事先并不在之前的urls.json文件中,此处的$stateProviderRef是第1步的全局变量。
5.在另一按钮事件中,测试是否可以马上跳转到这个testUrl.html页面
$scope.goNewUrl= function()
{
console.log("go dynamic url");
$state.go("testUrl");
};
编译打包apk,测试方案可以跳转到testUrl.html页面。
接下来的问题是,将默认的url内容和用户配置的url内容合并到一块customerUrs.json中,下次打开app的时候,加载这个customerUrs.json文件,而不是之前的urls.json.
如何实现在客户端的customerUrs.json的操作呢?研究中.......
Ionic 动态配置url路由的设置的更多相关文章
- spring security实现动态配置url权限的两种方法
缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...
- Spring Security之动态配置资源权限
在Spring Security中实现通过数据库动态配置url资源权限,需要通过配置验证过滤器来实现资源权限的加载.验证.系统启动时,到数据库加载系统资源权限列表,当有请求访问时,通过对比系统资源权限 ...
- Azure Application Gateway (3) 设置URL路由
<Windows Azure Platform 系列文章目录> 在之前的文章中,笔者介绍了Azure Web App可以设置URL路由.如下图: 在这里笔者简单介绍一下,首先我们还是创建以 ...
- django中url路由配置及渲染方式
今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...
- Django学习手册 - 正则URL路由配置/路由分发
############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...
- Django 02 url路由配置及渲染方式
Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...
- Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法
Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法 路由的分配中, 可以设定相应的转换器加以约束,比如 ...
- Django入门--url路由基本配置
URL(Uniform Resoure Locater)统一资源定位符,是对可以从互联网上得到资源位置和访问方法的一种简洁形式,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含 ...
随机推荐
- 【备忘】SQL语句增加字段、修改字段、修改类型、修改默认值
一.修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名 ...
- Oracle绑定变量在C#.NET中的应用及意义
一. 什么是绑定变量 绑定变量(bind variable) : select * from emp where empno=:empno; 是用户放入查询中的占位符,它会告诉Oracle“我会随后为 ...
- Git应用—02各种冲突场景处理(转载)
Git冲突与解决方法 https://www.cnblogs.com/gavincoder/p/9071959.html https://www.liaoxuefeng.com/wiki/001373 ...
- C#检测本机是否联网
public class Net { [DllImport("wininet")] private extern static bool InternetGetConnectedS ...
- 深度学习word embedding猜测性别初探
根据用户的一些特征数据,如果能推测出用户的性别借此提高产品的服务质量.广告的精准性等都是极好的. 机器学习方法有很多,而且一般都可以达到不错的效果,比如svm或神经网络等. 本文使用的代码参考——&l ...
- Python基础知识:函数
1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...
- Nginx实现页面缓存
页面缓存 1.缓存指令 Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道: A.proxy_cache_path 格式:proxy_cache_path path [levels=numb ...
- Spring boot 直接访问templates中html文件
application.properties 在浏览器中输入http://localhost:8080/index.html 会报一个 因为Spring boot 无法直接访问templates下的文 ...
- 控件_DatePicker
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view ...
- codechef Row and Column Operations 题解
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...