【问题标题】:How to display a dynamic message in a parent controller based on the results obtained from three child controllers如何根据从三个子控制器获得的结果在父控制器中显示动态消息
【发布时间】:2016-09-06 20:10:17
【问题描述】:

我有一个 div 包含三个其他的,每个都有自己的控制器。我想根据从每个控制器获得的结果动态显示一条消息。例如,如果解析的 3 个数组中有 1 个的长度大于 0,我想在警告消息中反映这一点。我试图在三个子控制器周围放置一个父控制器,但我无法从父控制器访问子控制器的范围,无论如何这似乎不正确。任何帮助将不胜感激。

<div id="pp-summary" ng-controller='PPSummaryCtrl as summCtrl'>
    <div id="pp-stats-summary" ng-controller='PlayerProfileStatsCtrl as s'>     
        <page-section section-title="'Recent Statistics'" excel="{ data:     s.statList, definitions: s.summaryHeaders, name: s.player.fullName + ' -  Summary     Stats' }"    >
            <core-table 
            table-sort
            parent-child-rows
            data="s.statList" 
            footer-data="s.statTotals" 
            columns="s.summaryHeaders">
            </core-table>
        </page-section>
    </div>
    <div ng-controller="PPScoutingCtrl as e">
        <h3 ng-if="!e.permission" id="no-eval-message">
            You do not have permissions to view evals on file for this player.
        </h3>
        <page-section ng-repeat="type in e.evalTypes" section-title="'Recent '+type.description + ' Evals'" ng-if="e.evalsByType[type.evalTypeLk]"
            excel="{data: e.evalsByType[type.evalTypeLk], definitions: e.getColumns(type.evalTypeLk), name: e.player.fullName + ' ' + type.description}"
            >
            <c-table columns="e.getColumns(type.evalTypeLk)" data="e.evalsByType[type.evalTypeLk]" group-rows="true" click-row="e.selectEval" class="table-overflow wrap-last-column"></c-table>
        </page-section>
    </div>
    <div ng-controller="PPNotesCtrl as n">
        <page-section ng-if="n.notes" section-title="'Recent Notes'">
            <c-table data="n.notes" click-row="n.selectNote" highlight="n.highlight" class="table-overflow" columns="n.noteColumns">
            </c-table>
        </page-section>
    </div>
    <h3 id="no-eval-message">
        {{ summCtrl.getWarningMessage() }}
    </h3>
</div>

【问题讨论】:

  • $scope.$emit 在您的子控制器中和 $scope.$on 在您的父控制器中。

标签: javascript angularjs


【解决方案1】:

这个问题在这里得到解答和解释..AngularJS - Access to child scope

短篇小说是你做不到的。

您可以按照 Gustavo 的建议使用发射和广播。

你也可以:

在父级中定义合适的属性,然后在子级中引用它们

使用服务作为中间人

【讨论】:

    【解决方案2】:

    我不知道这样做是否正确,但您可以使用 $on 和 $broadcast。

    在父控制器中你可以这样写:

    $rootScope.$on('load-warning', function() {
      $scope.warning-message = "Warning";
    });
    

    在你加载列表后的孩子中:

    $rootScope.$broadcast('load-warning');
    

    再一次,很确定这不是最好的方法,但它确实可以完成工作,希望对您有所帮助 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多