2014-08-28 52 views
2

最初我以爲$ 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'; 

}])

正如你可以看到這裏我不注入$範圍控制器。加載頁面時,它不會在文本字段或跨度上顯示「Foo Bar」。但是,當我開始在文本字段上寫一些值時,它反映了跨度。這意味着在範圍內聲明'fname',但它爲什麼沒有在頁面加載顯示。 當我注入$ scope時,一切正常。

+3

您注射'$ http'到控制器,但稱這是'$ scope'。 – 2014-08-28 11:45:02

+0

@JimCote:不,我有意傳遞$ http,因爲我需要它,它只是一小段代碼來顯示示例 – user3427540 2014-08-28 12:12:19

+0

數組中的字符串列表應該與控制器函數的參數匹配。否則,縮小會打破你的應用程序。您的代碼不會將$ http注入到控制器中。 – 2014-08-28 22:53:23

回答

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。這樣做是爲了當代碼被醜化並且uglifiery不會更改$scope$http的文字字符串,以便引用不會被破壞。

Here is a working Fiddle

+0

是否需要在$ http之前傳遞$ scope?這個命令很重要嗎? – user3427540 2014-08-28 12:23:41

+0

不,他們可以以任何順序。 – Malkus 2014-08-28 12:24:39

+0

So $範圍必須注入所有需要的情況下? – user3427540 2014-08-28 12:32:25

相關問題