随着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. 异步 Apex 类

    异步Apex类 一个Apex类可以定义为异步类,用于异步执行. 异步类可以通过多种方式实现: Future注解 批处理 Queueable接口 Schedulable接口 Future注解 使用Fut ...

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

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

  3. [ng:areq] Argument 'XXXXCtrl' is not a function, got undefined

    angular.module('MyApp', []) 这里的[]重复了,以后引入新的controller.js文件会覆盖前面那个,所以此处的[]去掉 .controller('MyCtrl', fu ...

  4. Android-滑动解锁高亮文字自定义TextView

    public class HightLightTextView extends TextView { // 存储view的宽度 private int mTextViewWidth = 0; // 画 ...

  5. SpringBoot整合定时任务

    定时任务一般是项目中都需要用到的,可以用于定时处理一些特殊的任务. 在SpirngBoot中使用定时任务变的特别简单,不需要再像SpringMVC一样写很多的配置,只需要在启动类上增加一个@Enabl ...

  6. 基于VMware Workstation在Windows Server 2008 R2上搭建SQL Server 2012高可用性组(AlwaysOn Group)测试环境(二)

    接上篇: 以SERVER02为例,将服务器加入域,并安装故障转移群集:(SERVER02-SERVER-04操作相同)

  7. 【PAT】B1033 旧键盘打字(20 分)

    #include<stdio.h> #include<algorithm> #include<ctype.h> using namespace std; bool ...

  8. 基于SpringCloud的服务注册和调用

    一:服务的注册和发现 Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry(注册登记)和Service Discovery(发现)实现.也是s ...

  9. Java中BufferedReader到底是一个什么类?

    1.java.io.BufferedReader 和 java.io.BufferedWriter 类各拥有8192字符的缓冲区.当BufferedReader在读取文本文件时,会先尽量从文件中读入字 ...

  10. python scrapy 登录知乎过程

    前面了解了scrapy框架的大概各个组件的作用, 现在要爬取知乎数据,那么第一步就是要登录! 看下知乎的登录页面发现登录主要是两大接口 一: 登录页面地址,获取登录需要的验证码,如下图 打开知乎登录页 ...