【问题标题】:Why my scope is undefined?为什么我的范围未定义?
【发布时间】:2015-06-24 05:50:08
【问题描述】:

我有以下html:

我正在尝试获得如下范围:

console.log("app element scope: " + $('#angularHeaderDiv').scope());

但我收到了:undefined

我是 angularJS 初学者,我只是不明白为什么这不起作用。

更新:这也不起作用:

var appElement = document.getElementById('angularHeaderDiv');
console.log("app element scope: " + angular.element(appElement).scope());

更新 2:我尝试在控制台中打印范围的所有代码:

   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());
});

【问题讨论】:

  • 不看javascript很难说。
  • 你想做什么?我不明白为什么 jQuery 集合会有一个方法 .scope 因为你包含了 Angular
  • @ExplosionPills 尝试不使用 jquery 并收到相同的结果(更新了问题)。
  • Angular 没有名为.scope() 的函数@RafaelEyng 是对的,你的意思是$scope?看看这里:docs.angularjs.org/guide/scope 或者您是否创建了自己的范围方法? .scope() 未定义的原因是因为它不存在

标签: jquery html angularjs


【解决方案1】:

如果你的代码中有这个:

$compileProvider.debugInfoEnabled(false);

...然后scope()isolateScope() 将返回undefined。如果它设置为false,您会注意到ng-scopeng-isolate-scope 等其他内容从元素的class= 属性中消失了。

见:https://code.angularjs.org/1.3.16/docs/guide/production#disabling-debug-data

【讨论】:

  • 非常感谢!现在我需要找到另一种方法来从我的焦点管理器指令中的元素中提取范围
  • 当 debugInfoEnabled 设置为 false 时如何获得作用域?还有其他方法可以获取元素的作用域吗?
【解决方案2】:

我认为您实际上没有scope。假设你的意思是$scope,它是一个在控制器和你的 DOM 的一部分之间共享的环境,它通过 AngularJS 依赖注入机制注入到你的控制器内部。除此之外,我看不到您的 '#angularHeaderDiv' 与任何范围之间有任何关联,因为此 div 甚至没有与任何控制器关联。

我对 AngularJS 也不是很有经验,但实际上我从未见过你在这里想要完成什么。

编辑

看到您的编辑,您尝试访问 config 内的 DOM 元素,我会说这肯定是解决您问题的非 AngularJS 方法。我建议您阅读有关该框架的更多信息。

【讨论】:

  • 我想要的是获得 rootScope,我在想在 ng-app 中这应该是可用的......
  • 正如我所说,$scope 是控制器和 DOM 的相关部分之间共享的环境。是的,你可以有嵌套的范围,在你的 DOM 中使用嵌套的控制器。
  • 好的,但这应该可以工作:var appElement = document.getElementById('main'); console.log("app element: " + angular.element(appElement).scope()); 因为 main 已经绑定了 HeaderCtrl,但这也不起作用。
  • 要点是:您无法在控制器之外访问您的$scope(使用美元)。而且,在您的控制器内部,我认为不需要像您一样访问 DOM 元素。看来您正在对 AngularJS 问题采取 jQuery 式的方法。
  • 完全可以从控制器外部访问控制器的作用域。它不仅仅是一个参数。这是从 3rd 方插件挂钩到角度生命周期的常用方法。 docs.angularjs.org/api/ng/function/…。正如您所指出的,OP 将无法从 config 函数的上下文中执行此操作,因此至少该部分是正确的。
猜你喜欢
  • 2017-02-12
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多