$ scope会自动注入Angular js中的控制器吗?

时间:2014-08-28 11:38:18

标签: javascript angularjs

最初我认为$ 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时,一切正常。

1 个答案:

答案 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等于$scopebar等于$http。这样做是为了在代码被uglified并且uglifiery不会更改$scope$http的文字字符串时所以引用不会被破坏。

<强> Here is a working Fiddle