angularjs路由ui-router示例

2023-05-16

angularjs默认提供的路由是angular-route.min.js提供的,这里介绍一个开源的,基于angularjs实现的ui-router路由。思路是类似的。页面不再使用ng-view来指定一个模板子页面,而是通过<ui-view></ui-view>指定一个模板子页面,同样也是预留出来,当有需要的时候,页面自动套用。

这里演示一个简单的路由,首先模拟从登陆页面,跳转到主页面,然后主页面可以切换到用户列表。效果图如下:

这里使用的angularjs版本是1.6.9,页面需要引入angular.min.js,angular-ui-router.min.js,另外,还需要一些页面相关的js。

index.html

<!doctype html>
<html ng-app="nodejs">
	<head>
	   <meta charset="UTF-8"/>
	   <title>nodejs</title>
	   <link rel="stylesheet" type="text/css" href="/css/reset.css"/>
	   <link rel="stylesheet" type="text/css" href="/css/public.css"/>
	</head>
	<body>
	   <div id="container">
			<ui-view></ui-view>
	   </div>
	   <script type="text/javascript" src="/js/libs/angular.min.js"></script>
	   <script type="text/javascript" src="/js/libs/angular-ui-router.min.js"></script>	
	   <script type="text/javascript" src="/js/common.js"></script>
	   <script type="text/javascript" src="/js/admin.js"></script>
	   <script type="text/javascript" src="/js/user.js"></script>
	   <script type="text/javascript">
	   		var app = angular.module("nodejs",["ui.router","common","admin","user"]);
	   		app.config(function($stateProvider,$locationProvider,$httpProvider){
	   			var baseState = {
	   				abstract:true,
	   				name:'baseState',
	   				templateUrl:'views/common/base.html',
	   				controller:'rootController'
	   			};
	   			var loginBaseState = {
	   				abstract:true,
	   				name:'loginBaseState',
	   				templateUrl:'views/common/login-base.html'
	   			};
	   			var states = [
	   				baseState,
	   				loginBaseState,
	   				{
	   					parent:loginBaseState,
	   					name:'login',
	   					templateUrl:'views/user/login.html',
	   					url:"",
	   					controller:'userController'
	   				},
	   				{
	   					parent:baseState,
	   					name:'main',
	   					templateUrl:'views/admin/main.html',
	   					url:"/admin/main",
	   					controller:'mainController'
	   				},
	   				{
	   					parent:baseState,
	   					name:'user',
	   					templateUrl:'views/user/list.html',
	   					url:"/user/list",
	   					controller:'userController'
	   				}
	   			];
	   			angular.forEach(states,function(state){
	   				$stateProvider.state(state.name,state);
	   			});
	   			$locationProvider.hashPrefix("");
	   		});
	   </script>
	</body>
</html>

views/common/base.html

<header>this is page header</header>
<main>
	<aside>
		<h2>menu</h2>
		<ul>	
			<li><a href="#/admin/main">主界面</a></li>
			<li><a href="#/user/list">用户管理</a></li>
		</ul>
	</aside>
    <section>
    	<ui-view></ui-view>
    </section>
</main>
<footer>this is page footer</footer>

views/common/login-base.html

<header>this is page header</header>
<main>
    <section>
        <h2>login page</h2>
    	<ui-view></ui-view>
    </section>
</main>
<footer>this is page footer</footer>

 views/admin/main.html

<div>主界面</div>

 views/user/list.html

<div>
	<h2>用户列表页面</h2>
	<ul ng-repeat="user in list">
		<li>ID:{{user.id}}-Name:{{user.name}}</li>
	</ul>
</div>

views/user/login.html

<div>
	<form>
		<div>
			<label>用户名:</label>
			<input type="text" name="username"/>
		</div>
		<div>
			<label>密码:</label>
			<input type="password" name="password"/>
		</div>
		<div>
			<input type="button" value="登录" ng-click="login()"/>
		</div>
	</form>
</div>

js/common.js

var commonModel = angular.module("common",[]);
commonModel.controller("rootController",function($scope){
});

js/admin.js

var adminModel = angular.module("admin",[]);
adminModel.controller("mainController",function($scope){
});

js/user.js

var userModel = angular.module("user",[]);
userModel.controller("userController",function($scope,$location){
	$scope.list = [
		{id:101,name:'angularjs'},
		{id:102,name:'nodejs'}
	];
	$scope.login = function(){
		//alert("login");
		$location.path("/admin/main");
	}
});

css/reset.css

*{margin:0;padding:0;}
html,body,input,a,p,h1,h2,h3,h4,h5,h6{font-size: 100%;font-weight: normal;font-family: Helvetica;}
a{text-decoration: none;color: #0088cc;}
.clearfix{*zoom:1;}
.clearfix:before,.clearfix:after{
	display: table;
	line-height: 0;
	content:'';
}
.clearfix:after{
	clear: both;
}
.fl{float:left;}
.fr{float:right;}
ul{list-style: none;}

 css/public.css

html,body{height: 100%;}
#container{min-height: 100%;position: relative;}
main{display:flex;}
aside{flex:left;background:#ccc;}
section{flex:1;}

所需要的资源就罗列完成了,需要的angularjs文件这里没有列出来,可以直接去官网或者github下载。 

 这里因为用到了angular的路由,所以,项目启动必须使用一个http服务,不能直接通过浏览器打开index.html访问。我们在index.html页面中配置了如下的state:

{
    parent:loginBaseState,
    name:'login',
    templateUrl:'views/user/login.html',
    url:"",
    controller:'userController'
}

其中url配置的是"",相当于访问首页,就是登录页面,这里虽然首页是index.html没错,但是它只是一个容器,没有内容,具体的内容还需要url=""的页面来填充。这里我们定义了两个base页面,一个是baseState,另一个是loginBaseState,他们都是abstract,即抽象的,他可以被继承,继承的页面只需要指定parent即可,这样,可以通过base页面来生成一些页面框架,而不用每个页面都单独编写。如用户管理页和主页面,都有页头,页尾,还有左侧菜单栏。当我们继承了base页面之后,用户管理页面和主页面的内容就剩下自己的部分,可以说很简单了。

angularjs路由,会把页面都分成小小的片段,不同的路由对应不同的页面主体,每个片段不必是一个完整的html文件。这一点会让我们疑惑。

angularjs1.6版本默认的路由 ,在路径上,会有一个bug,就是url中的"/"会被转义成为%2F,这样,当我们在浏览器上输入/user/list,会变成%2Fuser%2Flist,这样,我们的请求就到不了真正的页面。

这个问题的解决办法就是加入如下代码到路由控制部分。

$locationProvider.hashPrefix("");

 这样路由url转义的问题就解决了,上面的示例代码index.html中就已经使用了该代码,所以开始的演示中,没有出现url转义导致的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

angularjs路由ui-router示例 的相关文章

随机推荐

  • windows部署hadoop-2.7.0

    这里使用自己编译的hadoop 2 7 0版本部署在windows上 xff0c 记得几年前 xff0c 部署hadoop需要借助于cygwin xff0c 还需要开启ssh服务 xff0c 最近发现 xff0c 原来不需要借助cygwin
  • win7通过源码编译hadoop-2.7.0

    编译hadoop源代码 xff0c 意义在于当我们使用eclipse进行hadoop开发时 xff0c 可以直接在本地运行 xff0c 而无需打包成jar xff0c 然后再提交到hadoop服务器进行运行 当然 xff0c 这还需要一个可
  • win7源码编译hadoop-eclipse-plugin-2.7.0.jar

    当你厌烦了本地编码 xff0c 打包 xff0c 部署到远程服务器 xff0c 然后通过hadoop jar xxx jar wordcount input output的方式运行mapreduce程序 xff0c 那么可以考虑本地编译一个
  • windows下通过批处理脚本启动redis

    windows下redis启动 xff0c 需要进入redis安装目录 xff0c 然后shift 43 右键 xff0c 选择 在此处打开命令窗口 xff0c 然后输入redis server exe redis conf xff0c 就
  • KafkaOffsetMonitor-assembly-0.2.1.jar使用遇到的问题

    最近使用了一下最新版的kafka监控工具 xff0c 按照以前的方式运行 xff0c 能够打开首页 xff0c 但是首页什么内容也没有 xff0c 感觉像是出了什么幺蛾子 xff0c 浏览器右键打开开发者模式 xff0c 发现三个angul
  • springboot+jpa+mongodb开发实战

    mongodb作为nosql数据库的一种 xff0c 在javaee开发中也越来越受到重视 xff0c 这里介绍springboot 43 jpa 43 mongodb开发过程 1 新建maven工程 xff0c 引入springboot和
  • hive查询结果保存到本地

    使用hive查询 xff0c 结果我们通常会保存到hdfs xff0c 然后通过sqoop导出工具 xff0c 将其导出到外部mysql或者其他地方 xff0c 但是有时候查询结果就是一个数据 xff0c 比如count 的结果 xff0c
  • spring-data-mongodb两种实现方式对比

    之前介绍过springboot和mongodb整合 xff0c 使用了spring data mongodb xff0c 因为springboot注解和自动化配置 xff0c 我们少了很多配置 xff0c 这里介绍spring整合mongo
  • shell脚本获取昨天今天本周周一本周周日本月第一天本月最后一天

    偶尔在linux上需要做脚本 xff0c 并设置脚本按照日期来计算相关数据 xff0c 这时候就涉及到日期的获取 xff0c 这里介绍简单的几个重要日期的获取 xff0c 分别是昨天 xff0c 今天是本周的第几天 xff0c 本周周一 x
  • 4399游戏存档的那些事儿

    4399游戏存档的那些事儿 本文旨在简单分析4399游戏存取档的加解密 工具在吾爱都有提供下载 工具名称用途ffdec反编译swf文件charles抓包开发IDE 随意 存档加解密复现 一 抓包 随意找一个支持存档的游戏进行抓包 这里不分析
  • mongodb数据库从入门到精通

    mongodb数据库作为nosql的一种 xff0c 目前在nosql数据库中的应用排名几乎是数一数二 开发中也会越来越受到重视 xff0c 这里介绍命令行下操作mongo数据库的相关内容 基础部分 连接数据库 xff1a 一般连接数据库
  • linux上安装svn

    1 安装 yum install subversion 2 测试是否成功及查看版本 svnserve version 3 创建目录 makedir p home hadoop workspace svn pro 4 创建svn目录 svna
  • java通过jedis操作redis(从JedisPool到JedisCluster)

    redis作为一个缓存数据库 xff0c 在绝大多数java项目开发中是必须使用的 xff0c 在web项目中 xff0c 直接配合spring redis xff0c 各种配置都直接在spring配置文件中做了 xff0c 一般都是使用r
  • Lua redis() command arguments must be strings or integers

    如题 xff0c 在linux命令行下运行lua脚本操作redis xff0c 提示错误 root 64 server script cat set lua return redis call 39 set 39 KEYS 1 ARGV 1
  • git命令行下回退一个文件到上一个版本

    git版本控制在ide中 xff0c 很方便的回退一个文件 xff0c 只需要git gt revert就可以了 但是有时候 xff0c 我们会在命令行下操作git 比如部署到生产环境的时候 xff0c 我们不想打包 xff0c 而是想通过
  • 让web页面页脚footer固定在页面底部

    有时候 xff0c 我们发现很多页面内容不多的时候 xff0c 页面底部内容飘到了中间 xff1a 这个页面底部没有固定 xff0c 结果 xff0c 一个前端工程师是无法接受这样的结果的 这里介绍一种通用的解决办法 xff0c 让页面底部
  • 图文演示第一个nodejs实例

    学习nodejs xff0c 第一个项目就是如何构建一个简单的http服务 xff0c 然后通过浏览器输入访问地址访问 xff0c 打印一个简单的helloworld 这里直接入手 xff0c 首先确保机器上已经安装了node npm 以及
  • 构建http服务的几种方式

    做前端开发 xff0c 页面可以通过浏览器打开访问 xff0c 但是异步请求这里 xff0c 直接通过浏览器就不行了 xff0c 即便是访问的本地json资源 xff0c ajax也无能为力 另外 xff0c 如angularjs vue涉
  • nodejs+Express开发第一个web应用

    express是nodejs开发中最常用的一个http服务框架 xff0c 通过他可以很方便的构建http服务 另外他本身还提供了路由功能 xff0c 就是对请求的路径做区分 xff0c 分别对应后台不同的请求 这里介绍如何通过expres
  • angularjs路由ui-router示例

    angularjs默认提供的路由是angular route min js提供的 xff0c 这里介绍一个开源的 xff0c 基于angularjs实现的ui router路由 思路是类似的 页面不再使用ng view来指定一个模板子页面