参考博客:  https://www.cnblogs.com/gaoruixin/p/6070502.html

简介

$location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用。改变在地址栏中的URL会作用到$location服务,同样的,改变$location服务也会改变浏览器的地址栏。(可以使用$location进行重定向等操作)

$location服务:

暴露浏览器地址栏中的URL,让你可以:

  • 监察URL。
  • 改变URL。

与浏览器同步URL,当:

  • 改变地址栏。
  • 单击『前进』『后退』或一个历史记录中的链接。
  • 打开一个链接。
  • 将URL对象表示为一个方法集。 (protocol, host, port, path, search, hash)

服务依赖:

  • $browser
  • $sniffer
  • $rootElement

内置方法:

  • absUrl( ):只读;根据在RFC 3986中指定的规则,返回url,带有所有的片段。
  • hash( ):读、写;当带有参数时,返回哈希碎片;当在带有参数的情况下,改变哈希碎片时,返回$location。
  • host( ):只读;返回url中的主机路径。
  • path( ):读、写;当没有任何参数时,返回当前url的路径;当带有参数时,改变路径,并返回$location。(返回的路径永远会带有/)
  • port( ):只读;返回当前路径的端口号。
  • protocol( ):只读;返回当前url的协议。
  • replace( ):如果被调用,就会用改变后的URL直接替换浏览器中的历史记录,而不是在历史记录中新建一条信息,这样可以阻止『后退』。
  • search( ):读、写;当不带参数调用的时候,以对象形式返回当前url的搜索部分。
  • url( ):读、写;当不带参数时,返回url;当带有参数时,返回$location。

内置事件:

  • $locationChangeStart:在URL改变前发生。这种改变可以通过调用事件的preventDefault方法为阻止。查看ng.$rootScope.Scope#$on获得更多的细节。成功时触发$locationChangeSuccess事件。
  • $locationChangeSuccess:当URL改变后发生。

使用

何时使用$location

任何你想要改变当前URL的时候,都可以使用$location。

$location不会做

当浏览器的URL改变时,不会重新加载整个页面。如果想要重新加载整个页面,需要使用$window.location.href。

-----------------------------------------------------------------

一. 获取url的相关方法:

以 'http://localhost:8080/text#/foo?name=bunny#myhash' 这个路径为例:

1. 获取当前完整的url路径:

$location.absUrl():
// http://localhost:8080/text#/foo?name=bunny#myhash

*2. 获取当前url路径(当前url#后面的内容,包括参数和哈希值):

$location.url();
// /foo?name=bunny#myhash

*3. 获取当前url的子路径(也就是当前url#后面的内容,不包括参数):

$location.path()
// /foo

4. 获取当前url的协议(比如http,https)

$location.protocol()
// http

5. 获取当前url的主机名

$location.host()
// localhost

6. 获取当前url的端口

$location.port()
// 80 (这里就是wamp的默认端口号)

*7. 获取当前url的哈希值

$location.hash()
// myhash

*8. 获取当前url的参数的序列化json对象

$location.search()
// {"name":"bunny"}

二. 修改url的相关方法:

在上面讲到的所有获取url的8个方法,其中*开头的四个方法,可以传入参数进行修改url,在这种情况下,函数的返回值都是$location本身:

1. 修改url的子路径(也就是当前url#后面的内容,不包括参数):

参数格式:字符串

$location.url('/foo2?name=bunny2&age=12#myhash2');
// http://localhost:8080/text#/foo2?name=bunny2&age=12#myhash2

2. 修改url的子路径部分(也就是当前url#后面的内容,不包括参数):

参数格式:字符串

$location.path('/foo2/foo3');
// http://localhost:8080/text#/foo2/foo3/?name=bunny2&age=12#myhash2

3. 修改url的哈希值部分

参数格式:字符串

$location.hash('myhash3');
// http://localhost:8080/text#/foo2/foo3/?name=bunny2&age=12#myhash3

4. 修改url的参数部分

(1).传入两个参数,第一个参数的格式为字符串:

①第二个参数的格式也是字符串

第一个参数表示url参数的属性名,第二个参数是该属性名的属性值,如果是已有属性名,则修改,如果不是已有属性,则新增

$location.search('name','code_bunny')
// http://localhost:8080/text#/foo2/foo3/?name=code_bunny2&age=12#myhash3

②第二个参数的格式为数组,数组中的各个值也是字符串或者布尔值

第一个参数表示url参数的属性名,第二个参数是该属性名的值,有多少个值,url中就会依次重复出现多少个.如下:

$location.search('love',['zxg','mitu'])
// http://localhost:8080/text#/foo2/foo3/?name=code_bunny2&age=12&love=zxg&love=mitu#myhash3

(2).传入两个参数,第一个参数为字符串,第二个参数为null:

第一个值表示url参数的属性名,如果是已有属性名,则删除该属性,如果不是已有属性,那就等于没改过

$location.search('age',null)
// http://localhost:8080/text#/foo2/foo3/?name=code_bunny2#myhash3

(3).传入一个参数,格式为json对象:

直接用这个json对象里的键值对替换整个url的参数部分

①普通的键值对:

$location.search({name:'papamibunny',age:16,love:'zxg'})
// http://localhost:8080/text#/foo2/foo3/?name=papamibunny&age=16&love=zxg#myhash3

②属性值为一个数组:(和(1)②一样,重复这个属性)

$location.search({name:['code_bunny','white_bunny','hua_bunny'],age:16,love:'zxg'})
// http://localhost:8080/text#/foo2/foo3/?name=code_bunny&name=white_bunny&name=hua_bunny&age=16&love=zxg#myhash3

(4).传入一个参数,格式为字符串:

直接用这个字符串替换整个url的参数部分(没有键值对,参数部分就是一个属性名,但转换成json对象的话,这个属性的值就是true,但是在url里没有体现)

$location.search('bunnybaobao')
// http://localhost:8080/text#/foo2/foo3/?bunnybaobao#myhash3
// {"bunnybaobao":true}

三. 不存入历史记录:

在使用 '二' 里面的所有修改url的方法的时候,每修改一次,url都会被存入历史记录,可以使用后退按钮回到修改前的url,如果不想要这种效果,而仅仅是替换当前的记录,可以使用:

$location.replace()

举个栗子:

// 原url:
// http://localhost:8080/text#/foo?name=bunny#myhash
$location.url('/foo2?name=bunny2&age=12#myhash2');
// 修改一次后:
// http://localhost:8080/text#/foo2?name=bunny2&age=12#myhash2
// 按下后退回到原url:
// http://localhost:8080/text#/foo?name=bunny#myhash
// 再按下前进回到修改后url:
// http://localhost:8080/text#/foo2?name=bunny2&age=12#myhash2
$location.path('/foo2/foo3').replace();
// 修改第二次后调用replace():
// http://localhost:8080/text#/foo2/foo3?name=bunny2&age=12#myhash2
// 按下后退,不会回到第二次修改前的url,而是回到第一次修改前的url:
// http://localhost:8080/text#/foo?name=bunny#myhash

四.$locationChangeStart和$locationChangeStart事件

这两个事件分别发生在当url开始发生改变,以及url改变完成.他们都被绑定在$rootScope里面:

    $rootScope.$on('$locationChangeStart',function(){
console.log('开始改变$location')
});
$rootScope.$on('$locationChangeSuccess',function(){
console.log('结束改变$location')
});

这个和$route里的$routeChangeStart和$routeChangeSuccess很类似,但是要注意的是,

虽然都是改变url发生的事件,但要触发$locationChangeStart和$locationChangeSuccess事件,

就必须是$location服务导致的url变化,通过$route定义导致的url变化,不会触发$locationChangeStart和$locationChangeSuccess事件,

同样,这里是通过$location服务导致的url变化,所以即使定义了$routeChangeStart和$routeChangeSuccess事件,它也是不会被触发的.

[AngularJS] $location 服务简介的更多相关文章

  1. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  2. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  3. Android - 位置定位(Location)服务(Service)类的基本操作

    位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...

  4. Spring Cloud与微服务构建:微服务简介

    Spring Cloud与微服务构建:微服务简介 单体架构及其不足 1.单体架构简介 在软件设计中,经常提及和使用经典的3曾模型,即表示层.业务逻辑层和数据访问层. 表示层:用于直接和用户交互,也成为 ...

  5. NFS服务简介

    NFS服务简介 NFS是Network File System的缩写,即网络文件系统.NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS serve ...

  6. angualarjs $location服务

    $location服务 angular使用内置的$location服务来监听.操作url,包括以下功能: - 获取.监听.改变地址栏的URL: - 与URL实现双向数据绑定(地址栏变动.前进后退或者点 ...

  7. AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户, ...

  8. AD 域服务简介(二)- Java 获取 AD 域用户

    博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 一.前言 先简单简单回顾上一篇 ...

  9. cobbler自动装机服务简介与配置

    cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使用命令行 ...

随机推荐

  1. CodeForces 492A Vanya and Cubes

    A. Vanya and Cubes time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  2. Umbraco -- 在Visual Studio中新建一个View 如何在Umbraco back office 中显示出来

    在使用Umbraco中的过程中,遇到一个问题. 我在项目中(Visual Studio),添加了一个View---Test.cshtml. 然后进入到该Umbraco项目的back office, 在 ...

  3. C# 开发网页的打印版

    在项目中,有一个需求时是需要打印产品页面.但是打印出来的版本和网页上的版本不太一致,有些图片不需要,网页上以tab选项卡显示的内容,都需要在打印页面中看到..等等 CSS针对这种需求,引入了一个@me ...

  4. hdu1069

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; c ...

  5. ubuntu14编译SSF(ethzasl_sensor_fusion )

    参考:http://wiki.ros.org/ethzasl_sensor_fusion 1. cd catkin_ws/src/ 2 git clone git://github.com/ethz- ...

  6. QueryString

  7. Protocol Buffers官方文档(proto3语言指南)

    本文是对官方文档的翻译,大部分内容都是引用其他一些作者的优质翻译使文章内容更加通俗易懂(自己是直译,读起来有点绕口难理解,本人英文水平有限),参考的文章链接在文章末尾 这篇指南描述如何使用protoc ...

  8. CSS 框模型概述

    在 CSS 中,width 和 height 指的是内容区域的宽度和高度. 增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸. 假设框的每个边上有 10 个像素的外边距和 5 ...

  9. poj 1741 Tree(树的点分治)

    poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对. 首先对于一个树中的点对,要么经过根结点,要么不经过.所以我们可以把经过根节点的符合点对统计出 ...

  10. scapy框架

    性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. import requests def fetch_async(url): ...