随着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路由的设置的更多相关文章

  1. spring security实现动态配置url权限的两种方法

    缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...

  2. Spring Security之动态配置资源权限

    在Spring Security中实现通过数据库动态配置url资源权限,需要通过配置验证过滤器来实现资源权限的加载.验证.系统启动时,到数据库加载系统资源权限列表,当有请求访问时,通过对比系统资源权限 ...

  3. Azure Application Gateway (3) 设置URL路由

    <Windows Azure Platform 系列文章目录> 在之前的文章中,笔者介绍了Azure Web App可以设置URL路由.如下图: 在这里笔者简单介绍一下,首先我们还是创建以 ...

  4. django中url路由配置及渲染方式

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...

  5. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  6. Django 02 url路由配置及渲染方式

    Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...

  7. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  8. Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法

    Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法   路由的分配中, 可以设定相应的转换器加以约束,比如 ...

  9. Django入门--url路由基本配置

    URL(Uniform Resoure Locater)统一资源定位符,是对可以从互联网上得到资源位置和访问方法的一种简洁形式,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含 ...

随机推荐

  1. JAVA 和.NET在安全功能的比较

    以下转载于: http://www.it28.cn/ASPNET/825159.html 本文根据Denis Piliptchouk的文章翻译.摘录而来,有些术语翻译不太好理解,还请参考原文. 第一部 ...

  2. 你的BI应用处于什么阶段?解读Gartner BI成熟度模型

    文 | 帆软数据应用研究院 水手哥 本文出自:知乎专栏<帆软数据应用研究院>——数据干货&资讯集中地   无论国内还是国外,多数企业的BI和分析平台建设之路并不平坦:一是对自身的环 ...

  3. jquery获取标签名,获取id

    var elementId = $(this).attr("id"); var tagName = $(this)[0].tagName;

  4. Spring security实现国际化问题

    这两天Spring用户登录国际化这个问题困扰我好久啊,于昨天晚上终于把它干掉了. 场景就是我们公司的产品-incopat,需要支持中英文,用户登录这块用的spring自带的security,需求讲的通 ...

  5. Python使用map,reduce高阶函数模拟实现Spark的reduceByKey算子功能

    # 使用默认的高阶函数map和reduce import randomdef map_function(arg):  # 生成测试数据 return (arg,1) list_map = list(m ...

  6. csdn中使用git的一些注意事项---免得走弯路

    csdn中使用git必须的条件(windows系统下): 1.本机当前登录用户文件夹下必须有.ssh隐藏文件,并且这个文件中必须有用git bash中用命令生成的密钥文件:id_rsa  id_rsa ...

  7. Linux小技巧之:两种方法统计访问web网站的前10个IP

    获得访问前10位的IP地址: 10.46.170.7 218.202.70.147 77.72.83.87 5.39.217.107 185.197.74.234 185.197.74.231 第二种 ...

  8. January 07th, 2018 Week 01st Sunday

    To remember is to disengage from the present. 铭记过去就是放弃当下. To remember the past doesn't mean we would ...

  9. 17秋 软件工程 团队第五次作业 Alpha Scrum7

    17秋 软件工程 团队第五次作业 Alpha Scrum7 今日完成的任务 世强:部员详情列表的编写与数据交互,完善APP通知模块: 港晨:完成前端登陆界面编写: 树民:完善Web后端数据库访问模块: ...

  10. Java的自动装箱和拆箱

    一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Jav ...