mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
feat(jqLite): make injector() and scope() work with the document object
For typical app that has ng-app directive on the html element, we now can do:
angular.element(document).injector() or .injector()
angular.element(document).scope() or .scope()
instead of:
angular.element(document.getElementsByTagName('html')[0]).injector()
...
This commit is contained in:
parent
541bedd1a9
commit
5fdab52dd7
2 changed files with 54 additions and 0 deletions
|
|
@ -279,6 +279,13 @@ function JQLiteController(element, name) {
|
|||
|
||||
function JQLiteInheritedData(element, name, value) {
|
||||
element = jqLite(element);
|
||||
|
||||
// if element is the document object work with the html element instead
|
||||
// this makes $(document).scope() possible
|
||||
if(element[0].nodeType == 9) {
|
||||
element = element.find('html');
|
||||
}
|
||||
|
||||
while (element.length) {
|
||||
if (value = element.data(name)) return value;
|
||||
element = element.parent();
|
||||
|
|
|
|||
|
|
@ -107,6 +107,20 @@ describe('jqLite', function() {
|
|||
expect(deepChild.inheritedData('myData')).toBeFalsy();
|
||||
dealoc(element);
|
||||
});
|
||||
|
||||
|
||||
it('should work with the child html element instead if the current element is the document obj',
|
||||
function() {
|
||||
var item = {},
|
||||
doc = jqLite(document),
|
||||
html = doc.find('html');
|
||||
|
||||
html.data('item', item);
|
||||
expect(doc.inheritedData('item')).toBe(item);
|
||||
expect(html.inheritedData('item')).toBe(item);
|
||||
dealoc(doc);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -118,6 +132,18 @@ describe('jqLite', function() {
|
|||
dealoc(element);
|
||||
});
|
||||
|
||||
it('should retrieve scope attached to the html element if its requested on the document',
|
||||
function() {
|
||||
var doc = jqLite(document),
|
||||
html = doc.find('html'),
|
||||
scope = {};
|
||||
|
||||
html.data('$scope', scope);
|
||||
|
||||
expect(doc.scope()).toBe(scope);
|
||||
expect(html.scope()).toBe(scope);
|
||||
dealoc(doc);
|
||||
});
|
||||
|
||||
it('should walk up the dom to find scope', function() {
|
||||
var element = jqLite('<ul><li><p><b>deep deep</b><p></li></ul>');
|
||||
|
|
@ -147,6 +173,27 @@ describe('jqLite', function() {
|
|||
expect(span.injector()).toBe(injector);
|
||||
dealoc(template);
|
||||
});
|
||||
|
||||
|
||||
it('should retrieve injector attached to the html element if its requested on document',
|
||||
function() {
|
||||
var doc = jqLite(document),
|
||||
html = doc.find('html'),
|
||||
injector = {};
|
||||
|
||||
html.data('$injector', injector);
|
||||
|
||||
expect(doc.injector()).toBe(injector);
|
||||
expect(html.injector()).toBe(injector);
|
||||
dealoc(doc);
|
||||
});
|
||||
|
||||
|
||||
it('should do nothing with a noncompiled template', function() {
|
||||
var template = jqLite('<div><span></span></div>');
|
||||
expect(template.injector()).toBeUndefined();
|
||||
dealoc(template);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue