簡體   English   中英

AngularJS模態窗口范圍

[英]AngularJS modal window scope

我對控制器的范圍有疑問。 我使用控制器作為指令,並且我的代碼類似於以下示例:

<div ng-controller="ItemsController as itemCtrl">
   <table> .. some data ... </table>
   <a ng-click="itemCtrl.createItem()">Create new item</a>
</div>

<div id="create-form" ng-controller="ItemFormController as itemFormCtrl">
  <form ng-submit="itemFornCtrl.saveItem()">... form inputs ...</form>
</div>

<div id="edit-items" ng-controller="MultipleItemsEdit as multiEditCtrl">
   ... table with some data .... 
   <!-- I need this -->
   <a ng-click="itemCtrl.createItem()">Create new item</a>
   <!-- -->
</div>

基本上有3個獨立的作用域。 但是我需要打破這種隔離,從另一個范圍調用方法。

我目前正在使用丑陋的“委托”黑客。

控制器及其方法並不那么有趣,只有有趣的方法是ItemsController.createItem():

this.createItem = function(dataCollection) { 
    angular.element( $("#create-form) ).controller().createNewItem(dataCollection);
}

和ItemFormController.createNewItem(dataCollection):

this.createNewItem = function(dataCollection) {
   ... some initialization .... 
   $("#add-item").dialog( "open" );
}

我需要在ItemFormController上調用createNewItem方法以顯示模式框。 但是我不能直接做到這一點,所以我正在使用createItem方法,該方法獲取create-form元素及其控制器並在其上調用createNewItem方法。 這是一個代表。 但是我不喜歡它,因為我需要從代碼的許多地方調用createNewItem,並且我不想用這種委托方法填充所有控制器。

也許我可以將這些委托放在某種根控制器上,但是沒有更好的解決方案嗎?

您可以通過簡單地嵌套div來將編輯控制器范圍嵌套在列表控制器范圍中(將ng-controller="MultipleItemsEdit as multiEditCtrl"移到div中,並將ng-controller="ItemsController as itemCtrl"移到div中)。 這樣,您可以直接調用該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM