2015-09-05 53 views
0

我創建了一個ListCtrl,負責從服務器獲取數據並對其進行分頁(它將適用於我的所有資源)。但是,在設置資源路徑,默認限制等等之前,它必須接收幾個configurations ...如何鏈接到Angular中的不同控制器

我認爲這樣做的方式是在更大的控制器中使用我的ListCtrl,但是初始化它有幾個PARAMS這樣的:

<div ng-controller="DashboardCtrl as dashboard"> 
<div ng-controller="ListCtrl as list" ng-init="list.init(dashboard.listParams)"> 
    <... Iterate through list.items ...> 
</div> 
</div> 

讀了幾篇文章,我看到使用ng-init不好,只爲列表初始化應該被使用。有沒有更好的方法,而不使用ng-init?或者這只是好的

回答

0

考慮使用directive而不是直接將控制器附加到DOM元素。指令允許您顯式處理控制器之間的傳遞數據,而不依賴於全局狀態(許多使用服務的解決方案都依賴於該狀態)。

你會想創建一個指令,接受某種配置,然後你可以通過一個屬性傳遞。

angular.module('yourApp').directive('yourList', function() { 
    return { 
    bindToController: true, 
    controller: 'ListCtrl', 
    controllerAs: 'list', 
    scope: { 
     params: '=' 
    } 
    }; 
}); 
<div ng-controller="DashboardCtrl as dashboard"> 
    <your-list params="dashboard.listParams"></your-list> 
</div> 

然後params物業將可在ListCtrl的範圍。要處理指令使用的模板,可以使用單獨的部分,或者可以使用transclusion將元素保留在主模板中。

+0

嗨亞歷克西斯,這個想法是我一直在尋找!但是,我的範圍似乎並沒有達到指令的控制者。我嘗試了很多名字,但沒有成功。任何想法? –

+0

@IvanSeidel如果沒有代碼示例,我很難診斷您的問題。你可以將我鏈接到[MVCE](http://stackoverflow.com/help/mcve)或發佈一個單獨的問題嗎? –

+0

發現它是什麼。 'scope'綁定被傳遞給te控制器的作用域,而不是$ scope ...使用'this.myVar'而不是'$ scope.myVar'。 –

相關問題