2017-07-27 97 views
1

我是新來的角JS和教程他們地方,創建一個控制器的方式是:角JS - module.controller參數

angular.module('app', []) 
    .controller('TodoController', ['$scope', function ($scope) { 
    $scope.todos = [ 
     { title: 'Learn Javascript', completed: true }, 
     { title: 'Learn Angular.js', completed: false }, 
     { title: 'Love this tutorial', completed: true }, 
     { title: 'Learn Javascript design patterns', completed: false }, 
     { title: 'Build Node.js backend', completed: false }, 
    ]; 
    }]); 

我想了解什麼呢每個參數是:

  • 'TodoController'
  • 陣列
    • '$範圍'
    • 功能

我想第一個是控制器的名字,最後一個是TodoController構造。

但什麼是'$scope'?在HTML上使用的變量名稱,方法名稱?

我可以在陣列中發送更多參數嗎?

我在Angular docs上搜索過,但沒有關於方法的文檔,這是非常蹩腳的。搜索課程代碼既沒有給出更多的信息。

+1

我推薦從https://www.codeschool.com/pages/angularjs-vs-angular上做這個教程,他們描述了所有的概念。 –

+0

在該鏈接@estus的很好的解釋 – htafoya

回答

1

第二個參數(字符串數組+字符串+函數)用於依賴注入。

angular.controller('TodoController', ['$scope', function ($scope) { ... }]) 

萬一你的代碼被縮小了,角將知道注入哪些依賴關係,因爲字符串不受縮小的影響。

因此,縮小後,上面的代碼會變得這樣的事情:

angular.controller("TodoController",["$scope",function(o){...}]); 

而且它仍然會通過角度的依賴注入算法可讀。

PS。數組是可選的,你可以通過那裏只是普通的功能。

2

在數組中,參數(字符串)是(不包括最後一個,是的,這是構造函數)需要注入到數組中的依賴關係,這些依賴關係將以相同的順序在實現中傳遞的控制器(即構造函數)。

$scope是一個對象,它維護與視圖的綁定,並且它的內容在視圖和控制器中都可用。無論何時將其注入新的控制器並需要創建該控制器的實例,它都由($rootScope然後是層次結構)的$new方法創建。

1

是的。你是對的。

第一個參數是控制器名稱。第二個數組中的最後一個元素是控制器函數,其他元素是依賴項。 這被稱爲內聯數組註記。

您可以在不傳球達陣,除非你是不是涅槃代碼中創建控制器

仔細(隱式註釋):如果您計劃來縮小你的代碼,你的服務的名稱將獲得改名,打破你的應用程序。

請檢查三種創建控制器或服務的方法。 https://docs.angularjs.org/guide/di