扫码关注官方订阅号
在学习AngularJS的服务时,文中提到使用$location服务比使用window.location对象更好,它们的具体区别是什么,各自的优劣是什么,想具体了解一下。
走同样的路,发现不同的人生
$location服务是对所有浏览器中都存在的window.location对象的封装。那么,为什么需要使用$location服务,而不是直接使用window.location呢?
$location
window.location
关于全局变量,window.location是一个很好的例子(实际上,浏览器中的window和document两个对象也是很好的例子)。如果你的应用中存在全局变量,那么对它的测试、维护以及使用都会很麻烦(即使目前没有造成麻烦,但是长远来看必然会)。$location服务将会屏蔽这种污染(我们一般把全局变量称为全局空间污染);同时,当你进行单元测试的时候,可以利用$location服务注入假数据,从而可以测试浏览器的location细节
如果使用$location,那么就可以按照任何你喜欢的方式来使用。而如果使用window.location,当其中的内容发生变化时,你需要自已通知AngularJS,并且需要负责监听。
AngularJS
$location服务非常智能,它能够感受到浏览器是否可以使用HTML5 API。如果可以,它会自动使用这些API;如果不可以,它会回退并使用默认的处理方式。
HTML5
简单一句话就是window.location有的$location全都有,但又免费赠送许多功能,相当于加强版。具体参考这里,有个很详细的比较
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
$location服务是对所有浏览器中都存在的window.location对象的封装。那么,为什么需要使用$location服务,而不是直接使用window.location呢?告别全局变量
关于全局变量,window.location是一个很好的例子(实际上,浏览器中的window和document两个对象也是很好的例子)。如果你的应用中存在全局变量,那么对它的测试、维护以及使用都会很麻烦(即使目前没有造成麻烦,但是长远来看必然会)。$location服务将会屏蔽这种污染(我们一般把全局变量称为全局空间污染);同时,当你进行单元测试的时候,可以利用$location服务注入假数据,从而可以测试浏览器的location细节
API
如果使用
$location,那么就可以按照任何你喜欢的方式来使用。而如果使用window.location,当其中的内容发生变化时,你需要自已通知AngularJS,并且需要负责监听。HTML5集成
$location服务非常智能,它能够感受到浏览器是否可以使用HTML5API。如果可以,它会自动使用这些API;如果不可以,它会回退并使用默认的处理方式。简单一句话就是window.location有的$location全都有,但又免费赠送许多功能,相当于加强版。具体参考这里,有个很详细的比较