2015-05-31 100 views
1

當我使用常規的Angular控制器時,我將控制器屬性放置在DOM元素中,並且控制器控制此元素中的所有DOM樹,例如,角度ui路由器控制器作用域

<div ng-controller="myController"> 

當我附上通過UI路由器我做我的app.js文件中的控制器,通過各州的配置,這樣的:

.state('report', { 
    url: '/site/:site/report', 
    templateUrl: 'minderbinder/report/view/report.html', 
    controller: 'ReportController' 
}) 

這是什麼控制的範圍?

+1

它將控制templateUrl中的內容。讓我們想象一下,有一個div佔位符,templateUrl .html文件中的所有內容都將放在裏面,並且聲明的控制器將相應地放到div佔位符處。你可以看到angular-ui-router src來了解它是如何工作的。 –

回答

1

除非您的意圖是使ReportController的子控制器能夠控制DOM的一些嵌套和特定部分,否則不應該在div中手動聲明控制器。

作爲一個孩子,myController將繼承ReportController的範圍,後者是您模板的最重要的控制器。

避免在HTML中聲明控制器的好處是,可以使用完全相同的HTML來促進HTML模板在潛在各種控制器中的可重用性。

一個典型的例子是編輯表單和添加表單(CRUD)映射到他們自己的不同控制器,但是是相同的HTML模板。

+0

好的,所以我通過ui-router定義了控制器。這個控制器的範圍是什麼?我在我的代碼中放置{{var}}變量,並且僅在我的ui-view元素中看到這些值。我想在我的佈局中放置值,這是包裝UI視圖。 –

+1

來自此控制器的所有變量均可從模板'report.html'中訪問。它只針對ui-view的INSIDE。然後,包裝視圖應該聲明它自己的「父」狀態,並定義自己的控制器。比方說,例如一個名爲'main'(定位佈局)的狀態和另一個名爲'main.report'的狀態(定位佈局中的嵌套ui-view)。 – Mik378