Why my scope is undefined?
我有以下HTML:
我试着把示波器弄到:
1
| console.log("app element scope:" + $('#angularHeaderDiv').scope()); |
但我收到了:undefined。
我是AngularJS初学者,我不明白为什么这不管用。
更新:这也不起作用:
1 2
| var appElement = document.getElementById('angularHeaderDiv');
console.log("app element scope:" + angular.element(appElement).scope()); |
更新2:我试图在控制台中打印出作用域的所有代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| angular.module('cmApp', [ 'pascalprecht.translate' ])
.config(function($translateProvider) {
$translateProvider.useStaticFilesLoader({
prefix : '/resources/angular/scripts/languages/locale-',
suffix : '.json'
});
// add translation table
$translateProvider.preferredLanguage('en');
var appElement = document.getElementById('angularHeaderDiv');
console.log("app element:" + angular.element(appElement).scope());
}); |
- 你是说$scope吗?
- 很难说没有看到javascript。
- 你想做什么?我不明白为什么jquery集合会有一个方法.scope,因为您包括angular
- 如何访问浏览器控制台中角度$scope变量的可能副本?
- @爆炸药片在没有jquery的情况下尝试并收到相同的结果(更新了问题)。
- 角函数没有所谓的.scope()@rafaeley是对的,你是说$scope?看看这里:docs.angularjs.org/guide/scope,或者您创建了自己的scope方法?.scope()未定义的原因是它不存在
- 我对此不熟悉。但我认为这个fiidle可以帮助您jfiddle.net/sxkjc/716
- @CristianBoariu元素没有这样的范围。范围是指令的一部分。你具体想做什么?
- 元素在jquery(或jqlite)对象上有角度的scope()和isolateScope()方法。
- code.angularjs.org/1.3.14/docs/guide/…
如果您的代码中包含此内容:
1
| $compileProvider.debugInfoEnabled(false); |
…然后scope()和isolateScope()将返回undefined。如果设置为false,您会注意到其他东西,如ng-scope和ng-isolate-scope,会从元素的class=属性中消失。
参见:https://code.angularjs.org/1.3.16/docs/guide/production禁用调试数据
- 非常感谢!现在,我需要找到另一种方法从focus manager指令内的元素中提取范围。
- 当debuginfoEnabled设置为false时,您将如何获得范围?是否有其他方法来获取元素的作用域?
我不认为你真的有一个scope。假设您是指$scope,它是一个在控制器和您的DOM的一部分之间共享的环境,并且它是通过angularJS依赖注入机制注入到控制器内部的。除此之外,我看不到您的'#angularHeaderDiv'和任何范围之间有任何关联,因为这个DIV甚至与任何控制器都没有关联。
我也不是很有经验的安古拉吉斯,但实际上我从来没有看到你试图在这里完成什么。
编辑
在看到您的编辑之后,您试图访问config中的dom元素,我想说这是解决您的问题的一种非AngularJS方法。我建议您阅读更多关于框架的内容。
- 我想要的是得到rootscope,我在想,在ng应用程序中,这个应该是可用的…
- 正如我所说,$scope是控制器和DOM关联部分之间共享的环境。您可以,是的,在您的DOM中使用嵌套的控制器来嵌套作用域。
- 好吧,但这应该是可行的:var appElement = document.getElementById('main'); console.log("app element:" + angular.element(appElement).scope());,因为main已经绑定了headerctrl,但这也行不通。
- 重点是:你没有权限访问你的控制系统之外的EDOCX1(1美元)。而且,在控制器内部,我看不到像您这样访问DOM元素的必要性。似乎您正在使用jquery-ish方法来解决AngularJS问题。
- 您不能访问控制器外部的$scope,因为它甚至不是一个属性,它作为参数传递给控制器。
- 您是对的,但我需要这种方法,因为在部分更新之后,我必须从jquery方法内部调用它…所以基于这个:stackoverflow.com/a/15756337/174349它应该可以工作,但出于某种奇怪的原因,它不能……
- 如果你愿意发布一个plnkr或jsiddle,我可以看一下。
- 从控制器外部访问控制器的作用域是完全可能的。它不仅仅是一个参数。这是从第三方插件连接到Angular生命周期的常见方法。docs.angularjs.org/api/ng/function/…。正如您所指出的,OP将无法从config函数的上下文中做到这一点,因此至少该部分是正确的。
- @伊瓦尼感谢你的启发。我建议你详细说明一个完整的答案并贴出来,这样运营商可以接受它。
- 这应该告诉OP他们所需要的一切:stackoverflow.com/a/13744085/957731我看不出任何令人信服的理由来回答一个已经有答案的问题,我只是评论以澄清关于$scope与element.scope()的混淆,这似乎在这个问题上很普遍。