2016-04-28 59 views
0

我有以下HTML結構:角1.4 - 獲取父控制器財產

<div class="order-table-page" ng-controller="SummaryController as summaryCtrl"> 
    <h3>Summary</h3> 
    <!-- Statutes summary information --> 
    ... 

    <!--List of orders with selected statuses--> 
    <div ng-controller="OrderTableController as orderTableCtrl"> 
    ... 
    </div> 

</div> 

所以,OrderTableController是SummaryController的孩子。現在,在子控制器中,我想訪問父項屬性。在父類中,我定義:

orderApp.controller('SummaryController', ['$location', 'ordersApi', function($location, ordersApi){ 

    var ctrl = this; 

    ctrl.summary = []; 
    ctrl.test = 'test'; 

    ... 

}]); 

而且在孩子控制器我試圖讓「測試」屬性:

orderApp.controller('OrderTableController', ['$location', '$scope', 'ordersApi', function($location, $scope, ordersApi){ 

    var table = this; 
    table.orders = []; 


    console.log("Table orders 1"); 
    console.log($scope.$parent.test); 

    ... 

}]); 

我希望$範圍$父將包含SummaryController範圍。但我不確定它包含什麼,因爲$scope.$parent.test未定義,$ scope。$ parent具有名爲summaryCtrl的屬性。

我的問題是如何獲得父母屬性「測試」形式OrderTableController?

+0

你試過$範圍$ parent.summaryCtrl.test? –

+0

@SergioFandino是的,我嘗試過,它的工作。但我不明白爲什麼$ scope。$ parent.test不會。它看起來像我的代碼有問題。 – Tamara

回答

2

由於您正在使用Controller As功能,它會在$scope內創建一個屬性,它將代表控制器本身。

所以,在你的SummaryController你有一個test屬性。在SummaryController的範圍內,它將類似於$scope.summaryCtrl.test - 因爲您將其定義爲SummaryController as summaryCtrl

因此,您需要從您的子控制器中獲取test屬性(這將比使用$scope.$parent更優雅)。

如果您需要在控制器之間共享一些數據,您可以嘗試使用共享服務(因爲它們是單例)並在相關控制器中使用它們。

0

您只需在SummaryControllerOrderTableController添加REFFERENCE,你會得到OrderTableController一切從SummaryController :)

使用$scope.$parent是不是很優雅。沒有錯誤,但不優雅。

+0

參考控制器是什麼意思?你能否包含示例代碼? – Tamara

+0

當然,給我幾分鐘 – dpaul1994

+0

對不起,我現在沒有一個正確的例子,但明天我會在這裏添加一個帶有示例的評論,好嗎? – dpaul1994