Angular - - $location 和 $window

$location

$location服务解析浏览器地址中的url(基于window.location)并且使url在应用程序中可用。将地址栏中的网址的变化反映到$location服务和$location的变化反映到浏览器地址栏。

公开浏览器地址栏中的当前网址,这样就可以:

1.观察和监听网址。

2.改变网址。

与浏览器url同步当用户:

1.改变地址栏的值。

2. 单击“后退”或“前进”按钮(或单击“历史链接”)。

3.点击链接。

表示一组方法(协议、主机、端口、路径、搜索、哈希值)的网址对象。

依赖:$rootElement

方法

absUrl();

只能getter,返回的是完整的url。

url([url],[replace]);

getter/setter,返回当前url路径(当前url#后面的内容,包括参数和哈希值)。

protocol();

只能getter,返回当前url的协议(比如http,https)。

host();

只能getter,返回当前url的主机名。

port();

只能getter,返回当前url的端口号。

path([path]);

getter/setter, 返回当前url的子路径(也就是当前url#后面的内容,不包括参数)。

search(search,[paramValue]);

getter/setter,返回当前url的参数的序列化json对象。

hash([hash]);

getter/setter,返回当前url的哈希值。

replace();

如果被调用,当前$digest过程中所有$location的变化将取代当前的历史记录,而不是增加新的历史记录。

state([state]);

返回当前url的历史状态对象(不包括任何参数)。

调用一个参数并且返回$location时改变历史状态对象。

事件

$locationChangeStart

在url将要被改变时广播。可以使用preventDefault取消默认事件。

参数:

angularEvent:合成事件对象。

newUrl:新的url。

oldUrl:改变前的url。

newState:新的历史状态对象。

oldState:改变前的历史状态对象。

$locationChangeSuccess

在url成功的完成变化后广播。

参数:

angularEvent:合成事件对象。

newUrl:新的url。

oldUrl:改变前的url。

newState:新的历史状态对象。

oldState:改变前的历史状态对象。

使用代码:

  (function(){
     angular.module(‘Demo‘, [])
     .controller(‘testCtrl‘,["$location","$scope",testCtrl]);
     function testCtrl($location,$scope) {
        var url = "http://example.com:8080/#/some/path?foo=bar&baz=xoxo#hashValue";
        $location.absUrl();// http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
        $location.url();// some/path?foo=bar&baz=xoxo
        $location.protocol();// http
        $location.host();// example.com
        $location.port();// 8080
        $location.path();// /some/path
        $location.search();// {foo: ‘bar‘, baz: ‘xoxo‘}
        $location.search(‘foo‘, ‘yipee‘);
        $location.search();// {foo: ‘yipee‘, baz: ‘xoxo‘}
        $location.hash();// #hashValue
        $scope.$on("$locationChangeStart", function () {
          //监听url变化,在变化前做想要的处理
        });
        $scope.$on("$locationChangeSuccess", function () {
          //监听url变化,在变化后做想要的处理
        });
     }
  }());

$location在日常开发中是很有用的,特别是$locationChangeStart和$locationChangeSuccess,在做是否登录判断的时候配合拦截器使用,根据拦截器返回的状态,监听url变化并在需要登录的时候退出到登录页面。

$window

一个浏览器窗口对象的引用。它是一个全局对象,在window中是全局可用的,但是它导致一些问题。在Angular中也经常通过$window服务提到它,因此它可以被重写、删除及测试。

$window 等同于 window。

验证代码:

  (function(){
     angular.module(‘Demo‘, [])
     .controller(‘testCtrl‘,["$window",testCtrl]);
     function testCtrl($window) {
         $window === window;
     }
  }());

$window对象可以用来获取浏览器窗口各项属性(如窗口高度宽度、浏览器版本等等)。

时间: 2024-10-07 05:02:19

Angular - - $location 和 $window的相关文章

野兽的Angular Api 学习、翻译及理解 - - $location 和 $window

野兽的ng api学习 -- $location 和 $window $location $location服务解析浏览器地址中的url(基于window.location)并且使url在应用程序中可用.将地址栏中的网址的变化反映到$location服务和$location的变化反映到浏览器地址栏. 公开浏览器地址栏中的当前网址,这样就可以: 1.观察和监听网址. 2.改变网址. 与浏览器url同步当用户: 1.改变地址栏的值. 2. 单击“后退”或“前进”按钮(或单击“历史链接”). 3.点击

window.location与window.open()的区别

"top.location.href"是最外层的页面跳转"window.location.href"."location.href"是本页面跳转"parent.location.href"是上一层页面跳转. location是window对象的属性,而所有的网页下的对象都是属于window作用域链中(这是顶级作用域),所以使用时是可以省略window.而top是指向顶级窗口对象,parent是指向父级窗口对象. window.

完善用户体验: 活用window.location与window.open解决页面跳转问题

原文地址: JavaScript Redirects and window.open原文日期: 2014年08月27日翻译日期: 2014年08月31日翻译人员: 铁锚 (译者注: 本文解决的是按 Ctrl键时使用JS打开新页面的问题) 在简化的HTML5规范中,允许在 A 标签内包含多个 DIV 和/或其他块级元素. 现在只要用 <a> 标签包住块元素,就能搞定原来需要用JavaScript来监听并调用 window.location 实现页面跳转(redirect)功能.但使用<a&

JavaScript 计时器,History 对象(window),Location对象(window),Navigator对象

1,计时器setInterval()  在执行时,从载入页面后每隔指定的时间执行代码. setInterval(代码,交互时间); 2,计时器setTimeout(),在载入后延迟指定时间后,去执行一次表达式,仅执行一次. 递归,就是在运行的过程中调用自己.setTimeout()计时器,在载入后延迟指定时间后,去执行一次表达式,仅执行一次. setTimeout(代码,延迟时间); function startCount() { document.getElementById('count')

关于 Safari 浏览器不支持 location [ window.location.href window.open()] 跳转问题的解决方案

最近在做项目时,碰到 safari 浏览器不支持location跳转问题,针对此问题,可以通过 js 模拟点击时间来解决,代码如下: 1 <!DOCTYPE HTML> 2 <html lang="en-US"> 3 <head> 4   <meta charset="UTF-8"> 5   <title></title> 6 </head> 7 <body> 8   &

关于js中window.location.href,location.href,parent.location.href,top.location.href的用法

关于js中window.location.href,location.href,parent.location.href,top.location.href的用法 "window.location.href"."location.href"是本页面跳转. "parent.location.href" 是上一层页面跳转. "top.location.href" 是最外层的页面跳转. 举例说明: 如果A,B,C,D都是html,D

window.location.hash的简单了解

location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url.而location.hash则可以用来获取或设置页面的标签值.比如http://domain/#admin的location.hash="#admin".利用这个属性值可以做一个非常有意义的事情. 很多人都喜欢收藏网页,以便于以后的浏览.不过对于Ajax页面来说的话,一般用一个页面来处理所有的事务,也就是说,

fixed window.location.origin useless in IE

Today I got a issue that window.location.origin returns undefined in IE 9 . But we can fix this issue with following code: if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + window.location.hostname + (wind

window location href 刷新

页面刷新类型: 1.window.location.reload 刷新. window.location.reload()与window.location.href=window.location.href都可以刷新页面. 注: window.location.reload()刷新页面时,页面若有数据提交会提示是否提交数据,就是我们经常看到的那个讨厌的提示框.window.location.href=window.location.href则不会. 2.frame框架刷新. 代码如下: <htm