修改范围变量时不调用Angular ng-init

时间:2015-11-24 17:26:15

标签: javascript angularjs refresh

我有一个 $ scope.code.N3 变量,该变量由异步ajax调用填充。

我还有一个 $ scope.data.selectedIRI ,它是html组合框中选项的值。

我在表格中有一个html片段,在更新变量时会刷新:

这样可以在需要时刷新:

<tbody>
    <tr ng-repeat="t in code.N3" ng-if="t.subject==data.selectedIRI" ng-include="'displayPredicateObject'">
        <!-- Rendered by template -->
    </tr>
</tbody>

然而,这不起作用(它在我的代码的其他部分工作,其中此代码段被集成到由角度刷新的标记中):

<tbody ng-init="allTriples = code.N3">
    <tr ng-repeat="t in allTriples" ng-if="t.subject==data.selectedIRI" ng-include="'displayPredicateObject'">
        <!-- Rendered by template -->
    </tr>
</tbody>

这也不起作用:

<table ng-init="s = data.selectedIRI">
    <tbody ng-init="triples = getTriples(null, null, s)">
        <tr><td>[[triples]]</td></tr>
    </tbody>
</table>

此处 getTriples(...,...,data.selectedIRI)永远不会被调用,而 $ scope.data.selectedIRI 会更新。

有什么理由吗?

1 个答案:

答案 0 :(得分:0)

当你使用ng-init设置初始值时,$ scope.code.N3是未定义的,因为你说它是由一个尚未发生的异步调用设置的,这导致ng-repeate无声地失败

<tbody ng-init="allTriples = code.N3">
    <tr ng-repeat="t in allTriples" ng-if="t.subject==data.selectedIRI" ng-include="'displayPredicateObject'">
        <!-- Rendered by template -->
    </tr>
</tbody>