2014-10-01 23 views
0

我遇到的問題是我需要將根元素作爲錨標記,然後需要錨點標記下的div。他們都將使用屬於同一個應用程序的相同角度控制器。 vm.Open上的數據綁定可以在錨標籤內找到,但它不在div標籤內工作。我怎樣才能使用控制器'ordercontrol'將div標籤引導爲'app'? 現在我有:AngularJS不止一次設置相同的ngapp

我的HTML

<a data-ng-app="app" data-ng-controller="ordercontrol as vm" href="#" data-ng-click="vm.Open = !vm.Open">{{vm.Open}}</a> 

<div data-ng-app="app" data-ng-controller="ordercontrol as vm" id="QuickOrderDiv"> 
    <div class="row"> 
     {{vm.Open}} //showing as '{{vm.Open}}' inside page 
    </div> 
</div> 
+0

擁有一個應用程序和兩個控制器實例會更有意義嗎? – Shomz 2014-10-01 22:47:58

回答

2

Per AngularJS documentation,只有一個應用程序可以爲每個HTML文件進行自舉。您可能沒有理由嘗試在一個文檔中聲明和使用多個應用程序。根據你的意圖,有幾種方法可以繼續。首先,記住:將controller指定給元素(使用ng-controller指令)會創建一個從父級繼承的新的scope。該範圍內使用的所有元素,指令和其他控制器都可以使用該控制器來共享功能。因此,本質上,控制器用於集中特定於應用程序的模型和應用程序邏輯,並且通常用於視圖(考慮應用程序中的任何功能任務,例如訂單或登錄頁面;這些由控制器提供服務)。

如果您想要在整個應用程序中重複使用行爲多次,並且該行爲不是特定於應用程序中的特定視圖(請考慮組件,例如日期選擇器或購物車狀態圖標/鏈接),你可能希望將你的邏輯封裝在directive

現在有一些重疊(例如,指令可以有自己的範圍或控制器),並且在使用其中一個或另一個時可能會造成混淆。正如我上面提到的,控制器主要是爲了在應用程序中包含視圖的業務邏輯。指令是更正交的,封裝的模板和邏輯:a)您可以輕鬆地在應用程序中的視圖中重用,以及b)使用更豐富的標記和編程行爲擴展現有的HTML元素。您可以使用服務(這是一個單實例對象)來協調控制器和指令之間的數據。

考慮到每個文檔只能有一個ng-view元素,新開發人員面臨的另一個常見問題是獨立維護或繼承不同的狀態。在這種情況下,請考慮ui-router

對於你的情況,你可能需要某種QuickOrder指令,它綁定到OrderController上的一個值來確定它是否應該顯示,並且包含額外的模板標記以顯示順序或任何以及邏輯來管理它。

相關問題