【问题标题】:AngularJS Child controller data not loading on UI while using $emit to refresh Parent data使用 $emit 刷新父数据时,AngularJS 子控制器数据未加载到 UI 上
【发布时间】:2016-10-06 13:22:36
【问题描述】:

我正在使用 AngularJS 1.5 并使用 '$emit' 向父控制器发送事件以刷新父控制器数据。关于‘$On’我已经写好了刷新父控制器数据的逻辑。

现在,父控制器数据正在更新,但之后它无法为触发“$emit”的子控制器绑定数据。

我尝试使用 '$apply',但它说 '$digest' 已经在进行中。我还使用 Batrang 工具查看数据,它显示该页面包含所有这些数据,但它没有显示在 UI 上。

谁能告诉我如何强制 Angular 将这些数据与页面上已有的 HTML 控件绑定。

我无法在此处放置示例代码,因为它是一个实时项目,我必须创建一个示例项目来复制该问题。即使如果没有示例代码很难回答我的查询,那么我将在一天内将示例代码放在 Plunker 上。

【问题讨论】:

    标签: javascript angularjs emit ng-controller


    【解决方案1】:

    基于 Angular 文档,有两种方法可以在 HTML 中声明控制器:

    使用ng-controller="SettingsController1 as settings"将方法和属性直接绑定到控制器上

    $scope 注入控制器:ng-controller="SettingsController2"

    第二个选项在 Angular 社区中更常见,并且是 通常用于样板文件和本指南中。然而,有 将属性直接绑定到控制器的优点和 避免范围。

    使用controller as 可以清楚地看出您是哪个控制器 当多个控制器应用到一个时在模板中访问 元素。如果您将控制器编写为您拥有的类 更容易访问属性和方法,它们将出现在 范围,从控制器代码内部。因为总是有一个. 绑定,你不必担心原型继承 掩蔽基元

    因此,您始终可以使用 controller as 引用子范围中的父范围:

    <div ng-controller="parentController as parent">
        <span>{{parent.title}}</span>
        <div ng-controller="childController as child">
            <span>{{parent.title}}</span>
            <span>{{child.title}}</span>
        </div>
    </div>
    

    【讨论】:

    • 嗨 MarKoSen,感谢您的回答,但我在调用方法方面没有任何问题。我已经使用 $emit 工作正常并更新父数据,然后我正在调用方法来更新子数据。即使子数据正在 DOM 中加载,但它没有显示在 UI 上。所以我的主要查询是如何在 DOM 中已经可用的 UI 上显示这些数据。
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多