`

AngularJS中的$location

阅读更多

        $location服务是对所有浏览器中都存在的window.location对象的封装。那么,为什么需要使用$location服务,而不是直接使用window.location呢?

告别全局变量

        关于全局变量,window.location是一个很好的例子(实际上,浏览器中的window和document两个对象也是很好的例子)。如果你的应用中存在全局变量,那么对它的测试、维护以及使用都会很麻烦(即使目前没有造成麻烦,但是长远来看必然会)。$location服务将会屏蔽这种污染(我们一般把全局变量称为全局空间污染);同时,当你进行单元测试的时候,可以利用$location服务注入假数据,从而可以测试浏览器的location细节。

API

        可以使用window.location来访问浏览器location的全部内容。但是,window.location提供的是字符串形式的信息,而$location可以提供一些更加好用的、jQuery风格的getter和setter,从而可以用简洁的方式来使用这个对象。

AngularJS集成

        如果使用$location,那么就可以按照任何你喜欢的方式来使用。而如果使用window.location,当其中的内容发生变化时,你需要自已通知AngularJS,并且需要负责监听。

HTML5集成

        $location服务非常智能,它能够感受到浏览器是否可以使用HTML5 API。如果可以,它会自动使用这些API;如果不可以,它会回退并使用默认的处理方式。

        那么,什么时候应该使用$location服务呢?一是需要对URL的变化做出响应($route服务没有包含此功能,$route服务主要用来处理基于URL的视图)的情况;二是需要针对浏览器当前的URL触发一次change事件的情况。

        我们通过一个很小的例子来看看在真实的应用中应该如何使用$location服务。考虑这样一种情况:我们有一个日期选择器(datepicker),选择了日期之后,应用会导航到一个特定的URL。我们来看这种情况:

//假设日期选择器会使用日期来调用$scope.dateSelected
$scope.dateSelected = function(dateTxt) {
    $location.path('/filteredResults?startDate=' + dateTxt);
    //如果这件事情已经在其他库的回调函数(例如jQuery)中做过了,那么我们还必须加上下面这行调用
    $scope.$apply();
};

        $location对象上还有哪些可以用的方法呢?下表列出了一个概要介绍,在遇到困难时可以查阅。


        我们来看看$location服务将会具有怎样的行为,假设浏览器中的URL是http://www.host.com/base/index.html#!/path?param1=value1L#hashValue。上表中的setter函数一列中带有一些参数取值实例,示范了setter函数所期望的对象类型。

        注意,search()这个setter函数有很多操作模式:

1.在调用search(searchObj)时,如果使用一个对象<string, string>作为参数,那么对象上的所有键和值都会被当作参数对待。

2.调用search(string)会把q=String直接设置到URL上。

3.使用一个字符串加一个值的方式来调用search(param,value),将会直接设置URL中指定的搜索参数;而使用null调用它,会删除URL中指定的参数。

        使用这些setter中的任何一个都不意味着window.location会立即改变!$location服务融合在Angular的生命周期中,location的所有变化都会被聚集到一起,然后在周期结束的时候批量生效。所以,你可以一个接一个地随意修改,而不用担心用户会看到这些URL在闪烁变化。

 

文章来源:《用AngularJS开发下一代Web应用》

  • 大小: 37.7 KB
分享到:
评论

相关推荐

    AngularJS通过$location获取及改变当前页面的URL

    本篇将介绍AngularJS中的$location服务的基本用法,$location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录。本文通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。

    AngularJS的$location使用方法详解

    AngularJS的$location使用方法详解 一、配置config app.config([ '$locationProvider', function($locationProvider) { $locationProvider.html5Mode({ //设置为html5Mode(模式),当为false时为Hashbang模式 ...

    AngularJs Using $location详解及示例代码

    AngularJS的$location服务是框架的核心组件之一,用于管理和跟踪应用程序中的URL。它是一个非常有用的服务,因为它允许我们在不刷新整个页面的情况下与浏览器的URL进行交互。本文将深入探讨$location服务的功能、...

    ng-querystring-demo:演示AngularJS应用程序,显示如何使用$ location服务管理查询字符串

    在AngularJS中,$location服务是核心的一部分,它允许开发者轻松地处理应用程序的URL,包括查询字符串。这个名为"ng-querystring-demo"的项目提供了一个实际的示例,展示了如何在AngularJS应用中有效地操作查询字符...

    AngularJS内建服务$location及其功能详解

    $location是AngularJS中用于与浏览器地址栏进行交互的内建服务。$location服务是基于Window.location对象的封装,提供了更多与AngularJS数据绑定机制相结合的功能。 $location服务的主要功能是使得开发者可以更方便...

    AngularJS入门教程之服务(Service)

    在AngularJS中,推荐使用$location服务来替代传统的window.location对象,因为$location服务能更好地与AngularJS的脏检查机制结合,从而实现数据绑定和DOM更新。 $http服务是AngularJS中非常常用的内置服务之一,它...

    高效利用Angular中内置服务$http、$location等_.docx

    在AngularJS框架中,内置服务是开发者实现各种功能的关键工具,它们简化了与浏览器交互、数据获取和应用程序逻辑的处理。以下将详细讨论 `$http`、`$location` 和其他如 `$timeout` 和 `$interval` 服务,以及自定义...

    详解angular中通过$location获取路径(参数)的写法

    -angular 中通过 $location 获取路径(参数)的写法 Angular 中的 `$location` 服务提供了获取和修改 URL 的功能,包括获取当前完整的 URL 路径、当前 URL 路径、子路径、协议、主机名、端口、哈希值和参数等。下面...

    AngularJS 中文手册

    Directives 这些核心指令集可用于你的AngularJS应用的模板代码中。 例如:ngClick, ngInclude, ngRepeat… Services / Factories 这些核心服务集可通过依赖注入(DI)来供你的应用使用。 例如:$compile, $http, $...

    高效利用Angular中内置服务$http、$location等

    AngularJS中为我们提供了众多的内置服务,通过这些内置服务可以轻松的实现一些常用功能。下面对Angular中常用的内置服务进行一下总结。 1.$location服务 $location服务用于返回当前页面的URL地址,示例代码如下: ...

    详解Angular中通过$location获取地址栏的参数

    $location是AngularJS中的一个核心服务,它允许我们在应用程序中与当前URL进行交互。它可以用来读取URL、更改URL,以及监听URL的变化。在AngularJS应用中,$location通常是自动注入到控制器、服务或其他依赖注入组件...

    angularJs中跳转到指定的锚点实例($anchorScroll)

    监听$location.hash()并且滚动到url指定的锚点的地方。 可以通过$anchorScrollProvider.disableAutoScrolling()禁用。 依赖:$window $location $rootScope 使用:$anchorScroll([hash]);hash 将会指定元素滚动到的...

    angularjs路由

    路由是AngularJS中的核心功能之一,它允许我们根据URL导航到不同的视图,实现页面间的动态切换,而无需重新加载整个网页。在本“AngularJS路由”示例中,我们将探讨如何设置和使用AngularJS的路由系统。 首先,我们...

    老生常谈angularjs中的$state.go

    除了$state.go之外,文档中还提到了其他两种在AngularJS中进行路由跳转的方法:ng-href和ui-sref。ng-href是传统的HTML超链接标签的属性,用于定义需要导航到的URL。与传统的href不同,ng-href配合$location服务使用...

    angular中使用路由和$location切换视图

    `$route`服务是AngularJS中的一个核心服务,它与`$location`服务协同工作,实现了视图的动态切换。本文将深入探讨如何在Angular中使用这两个服务。 首先,让我们来理解`$route`服务。`$route`的主要职责是根据当前...

Global site tag (gtag.js) - Google Analytics