最初我认为$ scope会自动注入到Angular JS的控制器中。但现在我很困惑。我写了一小段代码。
的index.html
<html ng-app>
<body ng-controller="Controller">
<input type="text" ng-model="fname">
<span ng-bind="fname"></span>
<body>
</html>
的script.js
angular.module('docsSimpleDirective', [])
.controller('Controller', ['$http', function($scope) {
$scope.fname = 'Foo Bar';
}])
正如您所看到的,我不是在这里向控制器注入$ scope。页面加载时,它不会显示“Foo Bar&#39;在文本字段或跨度上。但是当我开始在文本字段上写一些值时,它反映了跨度。这意味着&#39; fname&#39;在scope中声明。但为什么它没有在页面上显示加载。 注入$ scope时,一切正常。
答案 0 :(得分:3)
您还有不同的事情发生。
首先,您需要以某种方式将应用绑定到DOM
,在这种情况下,您将模块命名为docsSimpleDirective
,因此您需要添加ng-app="docsSimpleDirective
与控制器相同或更高级别
<!-- added ng-app="docsSimpleDirective" -->
<div ng-app="docsSimpleDirective" ng-controller="Controller">
<input type="text" ng-model="fname">
<span ng-bind="fname"></span>
</div>
第二,您正在使用数组注释来定义良好的依赖关系。如果您不这样做并且尝试使用代码,则会遇到问题。您当前绑定的方式不会将$scope
传递给您传递的$http
名称为$scope
的控制器。
angular.module('docsSimpleDirective', [])
.controller('Controller', ['$scope', function($scope) {
// Not ['$http', function($scope)....
$scope.fname = 'Foo Bar';
}])
如果你想将$scope
和$http
传递给控制器,它将被定义为这样。
.controller('Controller', ['$scope','$http', function($scope,$http) {
简而言之,您可以.controller('Controller', ['$scope','$http', function(foo,bar) { ...
foo
等于$scope
而bar
等于$http
。这样做是为了在代码被uglified并且uglifiery不会更改$scope
和$http
的文字字符串时所以引用不会被破坏。
<强> Here is a working Fiddle 强>