AngularJs Using $location详解及示例代码(4)

  $location知道angular的scope life-cycle。当浏览器的URL发生改变时,它会更新$location,并且调用$apply,所以所有$watcher和$observer都会得到通知。当我们再$digest阶段中修改$location,不会出现任何问题;$location会将这次修改传播到浏览器中,并且通知所有$watcher、$observer。当我们需要在angular外面改变$location时(例如在DOM事件中或者在测试中),我们必须调用$apply,以传播这个变化。

3. $location.path() and ! or / prefixes

  path可以直接使用”/”开始;$location.path()setter会在value没有以”/”开头时自动补上。

  注意”!”前缀,在Hashbang mode中,不属于$location.path()的一部分。它仅仅是hashPrefix。

六、Testing with the $location service

  在测试中使用$location服务的时候,是处于angular scope life-cycle外面的。这意味着我们需要负责调用scope.apply()。  

describe('serviceUnderTest', function() { beforeEach(module(function($provide) {   $provide.factory('serviceUnderTest', function($location){   // whatever it does...   }); }); it('should...', inject(function($location, $rootScope, serviceUnderTest) {   $location.path('/new/path');   $rootScope.$apply();   // test whatever the service should do... })); });  

七、Migrating from earlier AngularJS releases

  在早期的angular中,$location使用hashPath或者hashSearch去处理path和search方法。在这个release中,当有需要的时候,$location服务处理path和search方法,然后使用那些获得得信息去构成hashbang URL(例如#!/path?search=a)。

八、Two-way binding to $location

  angular compiler当前不支持方法的双向绑定(https://github.com/angular/angular.js/issues/404)。如果我们希望对$location对象实现双向绑定(在input中使用ngModel directive),我们需要指定一个额外的model属性(例如:locationPath),并加入两个$watch,监听两个方向上的$location更新,例如:

<input type="text" ng-model="locationPath" />

// js - controller $scope.$watch('locationPath', function(path) { $location.path(path); ); $scope.$watch('$location.path()', function(path) { scope.locationPath = path; });

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzfgdd.html