Javascript 在这个简单的AngularJs页面中,控制器在哪里?

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> &

我被告知,每个带有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>

<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

当您未在angular
ng 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谢谢。我真的不明白为什么我的答案会被否决?