【问题标题】:angularjs: ng-repeat not working with parent scope propertyangularjs:ng-repeat 不适用于父范围属性
【发布时间】:2013-05-23 15:39:57
【问题描述】:

在子控制器中,我在父作用域上填充了一个数组:

$scope.person.testArray = [{id: "test"},{id: "test2"}];

这很好用,person 属性现在有一个名为 testArray 的额外属性,其中包含上述值。

然后在与子控制器关联的视图中,我要显示数组的值:

<div ng-repeat="op in person.testArray">
  {{op.id}}
</div>

什么都没有。

但是,我知道这与我使用 ng-repeat 的事实有关。如果,在子控制器中,我在 person 对象上设置了一个常规属性,例如:

$scope.person.test = "test";

然后在我做的视图中:

{{person.test}}

它显示字符串“test”。

我在使用 ng-repeat 时做错了什么?

【问题讨论】:

  • 你是否有一个 JSFiddle 或类似的东西可以证明这个问题?
  • 您可以尝试使用op in $parent.person.testArray 代替吗? $parent 不是必需的,但如果它有效,请试一试。另外,你能提供一个 plunkr 或一个 fiddle 它不起作用的地方吗?

标签: angularjs angularjs-ng-repeat


【解决方案1】:

您不必在子控制器中使用$parent,因为子控制器的$scope prototypically inherits 来自父控制器的$scope

function ParentCtrl($scope) {
    $scope.person = {};
}

function ChildCtrl($scope) {
    $scope.person.testArray = [{id: "test"}, {id: "test2"}];
}

HTML:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
        <div ng-repeat="op in person.testArray">{{op.id}}</div>
    </div>
</div>

fiddle

【讨论】:

  • 哦,我的错。我的代码中没有使用 $parent 。我不小心在我的帖子中添加了。所以我做你正在做的事情,但我仍然无法在 ng-repeat 中显示任何内容。我已经更新了我原来帖子中的代码。
  • @Sam,我们需要查看更多代码来帮助您。您可能在 ng-repeat 之前或内部使用了一些 Angular 内置或自定义指令,这些指令可能会创建额外的范围。
  • 我已经让它在一个单独的示例项目中工作。我不知道我的申请出了什么问题,我将不得不进一步调查。但是,我在我制作的示例中注意到,它不是更新父属性,而是在子作用域上创建一个新属性。这是正常行为吗?我本来希望父范围的属性会被更新而不是......
  • @Sam,如果没有看到您的样本,很难猜测会发生什么。
【解决方案2】:

虽然我建议不要使用 $parent,但您应该可以像这样使用 ng-repeat:

<div ng-repeat="op in $parent.person.testArray">
  {{op.id}}
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2014-02-25
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多