我需要編寫一個指令,將控制器的作用域設置爲它。裏面有輸入和按鈕。當點擊某個按鈕時,它會調用$ scope.refresh(),它將模型值傳遞給某些網格以使其刷新。如何向控制器添加屬性或在角度中自定義控制器
大多數事情都很好。我將模型綁定到內部輸入中,使用ng-click綁定按鈕單擊事件並調用refresh()方法。但在刷新功能中,我需要獲取數據表的ID並與之交互。現在我只能通過ng-click的方法參數傳遞它。代碼如下:
<div ng-controller="MyController">
<input ng-model="year"/>
........
<button ng-click="refresh('grid1, grid2')">Refresh</button>
<button ng-click="reset()">Reset</button>
</div>
我認爲它看起來很醜。如果Grid ID需要在其他方法中重用,我必須多次傳遞它,但我不知道如何將attr傳遞給控制器或擴展Controller。有沒有一種很好的方法來實現這樣的事情?
<div my-controller="MyController" grids='grid1, grid2' charts='chart1,chart2' ...>
<input ng-model="year"/>
......
<button ng-click="refresh()">Refresh</button>
<button ng-click="reset()">Reset</button>
</div>
或者,也許這個想法是不好的。我應該更好地用另一種方式來完成這項工作嗎?
更新:
的使用情況是這樣的:
我需要創建其中包含一些輸入(經由transclusion我猜)可重複使用的組件作爲查詢。該組件與一些外部網格和圖表綁定(不幸的是,它們不是指令)。組件中有按鈕使用ng-click觸發refreshGrid或refreshCharts動作。它需要網格和圖表ID來調用動作中的setQuery()方法,並將模型(輸入值)傳遞給方法。這就是爲什麼我需要將ID傳入組件或動作。
我使用ng-controller的原因是爲了創建一個新的隔離範圍。
好的方法去。但是由於控制器中有很多操作/ ng單擊,我需要將它們放入控制器屬性中,就像我的第二個代碼片段所示。我將「我的控制器」與ng-controller一起放在同一個div元素中,就像你的方式一樣,內部的doms不見了。它與「transclude」屬性有關嗎? –
也許我不理解你的用例,但是如果你把這個指令放在實際的網格上,每個網格都會獨立運行。所以如果你有10個網格,並且你想在這些網格上有5個動作,你只需要一個包含5個手錶的指令 - 每個動作一個。你已經從控制器中刪除所有這些管道並將其放入可重用指令中。 – BoxerBucks
我更新了這個問題並提出了用例。 –