随着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. 【备忘】SQL语句增加字段、修改字段、修改类型、修改默认值

    一.修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名 ...

  2. Oracle绑定变量在C#.NET中的应用及意义

    一. 什么是绑定变量 绑定变量(bind variable) : select * from emp where empno=:empno; 是用户放入查询中的占位符,它会告诉Oracle“我会随后为 ...

  3. Git应用—02各种冲突场景处理(转载)

    Git冲突与解决方法 https://www.cnblogs.com/gavincoder/p/9071959.html https://www.liaoxuefeng.com/wiki/001373 ...

  4. C#检测本机是否联网

    public class Net { [DllImport("wininet")] private extern static bool InternetGetConnectedS ...

  5. 深度学习word embedding猜测性别初探

    根据用户的一些特征数据,如果能推测出用户的性别借此提高产品的服务质量.广告的精准性等都是极好的. 机器学习方法有很多,而且一般都可以达到不错的效果,比如svm或神经网络等. 本文使用的代码参考——&l ...

  6. Python基础知识:函数

    1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...

  7. Nginx实现页面缓存

    页面缓存 1.缓存指令 Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道: A.proxy_cache_path 格式:proxy_cache_path path [levels=numb ...

  8. Spring boot 直接访问templates中html文件

    application.properties 在浏览器中输入http://localhost:8080/index.html 会报一个 因为Spring boot 无法直接访问templates下的文 ...

  9. 控件_DatePicker

    import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view ...

  10. codechef Row and Column Operations 题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...