chore($location) switch to use $rootElement

This commit is contained in:
Misko Hevery 2012-05-18 15:26:09 -07:00
parent 85632cb44c
commit 8aa18f0ad0
3 changed files with 19 additions and 15 deletions

View file

@ -405,7 +405,7 @@ function locationGetterSetter(property, preprocess) {
* *
* @requires $browser * @requires $browser
* @requires $sniffer * @requires $sniffer
* @requires $document * @requires $rootElement
* *
* @description * @description
* The $location service parses the URL in the browser address bar (based on the {@link https://developer.mozilla.org/en/window.location window.location}) and makes the URL available to your application. Changes to the URL in the address bar are reflected into $location service and changes to $location are reflected into the browser address bar. * The $location service parses the URL in the browser address bar (based on the {@link https://developer.mozilla.org/en/window.location window.location}) and makes the URL available to your application. Changes to the URL in the address bar are reflected into $location service and changes to $location are reflected into the browser address bar.
@ -468,8 +468,8 @@ function $LocationProvider(){
} }
}; };
this.$get = ['$rootScope', '$browser', '$sniffer', '$document', this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',
function( $rootScope, $browser, $sniffer, $document) { function( $rootScope, $browser, $sniffer, $rootElement) {
var currentUrl, var currentUrl,
basePath = $browser.baseHref() || '/', basePath = $browser.baseHref() || '/',
pathPrefix = pathPrefixFromBase(basePath), pathPrefix = pathPrefixFromBase(basePath),
@ -487,7 +487,7 @@ function $LocationProvider(){
var u = currentUrl, var u = currentUrl,
absUrlPrefix = composeProtocolHostPort(u.protocol(), u.host(), u.port()) + pathPrefix; absUrlPrefix = composeProtocolHostPort(u.protocol(), u.host(), u.port()) + pathPrefix;
$document.bind('click', function(event) { $rootElement.bind('click', function(event) {
// TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
// currently we open nice url link and redirect then // currently we open nice url link and redirect then

View file

@ -11,3 +11,6 @@
* location where the applications {@link angular.module.AUTO.$injector $injector} service gets * location where the applications {@link angular.module.AUTO.$injector $injector} service gets
* published, it can be retrieved using `$rootElement.injector()`. * published, it can be retrieved using `$rootElement.injector()`.
*/ */
// the implementation is in angular.bootstrap

View file

@ -498,8 +498,8 @@ describe('$location', function() {
// html5 history enabled, but not supported by browser // html5 history enabled, but not supported by browser
describe('history on old browser', function() { describe('history on old browser', function() {
afterEach(inject(function($document){ afterEach(inject(function($rootElement){
dealoc($document); dealoc($rootElement);
})); }));
it('should use hashbang url with hash prefix', function() { it('should use hashbang url with hash prefix', function() {
@ -532,8 +532,8 @@ describe('$location', function() {
// html5 history enabled and supported by browser // html5 history enabled and supported by browser
describe('history on new browser', function() { describe('history on new browser', function() {
afterEach(inject(function($document){ afterEach(inject(function($rootElement){
dealoc($document); dealoc($rootElement);
})); }));
it('should use new url', function() { it('should use new url', function() {
@ -681,7 +681,6 @@ describe('$location', function() {
function configureService(linkHref, html5Mode, supportHist, attrs, content) { function configureService(linkHref, html5Mode, supportHist, attrs, content) {
module(function($provide, $locationProvider) { module(function($provide, $locationProvider) {
var jqRoot = jqLite('<div></div>');
attrs = attrs ? ' ' + attrs + ' ' : ''; attrs = attrs ? ' ' + attrs + ' ' : '';
// fake the base behavior // fake the base behavior
@ -692,14 +691,16 @@ describe('$location', function() {
} }
link = jqLite('<a href="' + linkHref + '"' + attrs + '>' + content + '</a>')[0]; link = jqLite('<a href="' + linkHref + '"' + attrs + '>' + content + '</a>')[0];
root = jqRoot.append(link)[0];
jqLite(document.body).append(jqRoot);
$provide.value('$document', jqRoot);
$provide.value('$sniffer', {history: supportHist}); $provide.value('$sniffer', {history: supportHist});
$locationProvider.html5Mode(html5Mode); $locationProvider.html5Mode(html5Mode);
$locationProvider.hashPrefix('!'); $locationProvider.hashPrefix('!');
return function($rootElement, $document) {
$rootElement.append(link);
root = $rootElement[0];
// we need to do this otherwise we can't simulate events
$document.find('body').append($rootElement);
};
}); });
} }
@ -711,11 +712,11 @@ describe('$location', function() {
} }
function initLocation() { function initLocation() {
return function($browser, $location, $document) { return function($browser, $location, $rootElement) {
originalBrowser = $browser.url(); originalBrowser = $browser.url();
// we have to prevent the default operation, as we need to test absolute links (http://...) // we have to prevent the default operation, as we need to test absolute links (http://...)
// and navigating to these links would kill jstd // and navigating to these links would kill jstd
$document.bind('click', function(e) { $rootElement.bind('click', function(e) {
lastEventPreventDefault = e.isDefaultPrevented(); lastEventPreventDefault = e.isDefaultPrevented();
e.preventDefault(); e.preventDefault();
}); });