Javascript 在这个简单的AngularJs页面中,控制器在哪里?
我被告知,每个带有ngApp指令的AngularJS页面都有一个控制器,提供$scope。在站点给出的最早、最简单的示例中,代码没有ngController标记:Javascript 在这个简单的AngularJs页面中,控制器在哪里?,javascript,angularjs,angularjs-controller,angularjs-module,Javascript,Angularjs,Angularjs Controller,Angularjs Module,我被告知,每个带有ngApp指令的AngularJS页面都有一个控制器,提供$scope。在站点给出的最早、最简单的示例中,代码没有ngController标记: <!DOCTYPE html> <html lang="en-US"> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> &
<!DOCTYPE html>
<html lang="en-US">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>
<div ng-app="">
<p>Name : <input type="text" ng-model="name"></p>
<h1>Hello {{name}}</h1>
</div>
</body>
</html>
姓名:
你好{{name}
该页面显然可以工作——在W3Schools链接上尝试——并且具有作用域($scope.name)。是否始终存在隐式控制器
谢谢,
Jerome。此页面上没有控制器。但是
ng controller
并不是创建$scope的唯一指令ng app
还创建了一个$scope,这就是name
启用的$scope
控制器只是一些与作用域交互的代码。这只是UI中的一个简单的双向绑定,它实际上创建了控制器本身并将$scope绑定到您的direcives:但在现实世界中,您必须创建一个模块,然后将控制器注入其中。这只是让您了解AngularJS是什么,我在这里找到了jenkov的一个非常好的教程,它将指导您从头开始创建AngularJs应用程序 另外,在谷歌上搜索一些AngularJs JSFIDLE示例,你可以找到很多帮助你入门的示例- 不,那里没有隐式控制器,在幕后是它的
$rootScope
当您未在angularng app
中指定模块时,它将在没有angular
模块的页面上初始化angular
但由于此处未提供ng控制器
,Angular将创建$scope
,它将利用$rootScope
,并将在$rootScope
内创建变量
因为每当您在第页上编写ng controller
指令时。Angular在当前运行的作用域上使用$new(false)
方法从父作用域创建和新建作用域。在这种情况下,如果我们在这里引入ng controller
,那么它可能是$rootScope.$new()
编辑
通过使用angular.injector
访问$rootScope
,您可以验证代码是否已添加到$rootScope
代码
function checkScopeValues() {
var app = angular.element(document.getElementById('test')).injector();
var rootScope = app.get('$rootScope');
alert("value from rootScope " + rootScope.name);
}
好的观点。我建议不要照本宣科。大多数情况下,它们并不是详尽的,甚至不是错误的。根据stackoverflow中其他地方的建议,我在包含ngApp(…)的DIV上放置了一个ID,然后在控制台中,将其命名为angular.element($('#xx')).scope()。其中一个属性是“name”。这向我证明了这个答复的正确性。这是ngApp的$scope还是$rootScope?谢谢你的回复。我相信ng应用程序创建了$rootScope
的子范围,但它继承自$rootScope
,因此在大多数情况下,您可以将它们视为相同的thing@rob请看我的编辑。实际上,当应用程序模块为空时,只需在我之前使用的注释angular.element().scope()中将变量添加到它的$rootScope
获取$scope。我还没有看到任何东西可以让我从Javascript控制台获取$rootScope。有吗?注意:我遍历了从.scope()获得的值,但没有看到$rootScope的任何内容。@JeromePMrozak看一下我的编辑,我展示了如何在范围中找到该变量。.我也添加了plunkr。.您的代码可以工作,因为$rootScope
变量可以在$scope
中访问,我使用了checkScopeValues(),它提供了“name”变量和angular.element().scope()一样。我会看一会儿。我不知道如何为两个结果分配一个“绿色检查答案”。但如果可以,我会同时给出这两个结果。@JeromePMrozak谢谢。我真的不明白为什么我的答案会被否决?