gpt4 book ai didi

javascript - AngularJS 递归 ng-repeat 变量与 ng-include 绑定(bind)

转载 作者:行者123 更新时间:2023-11-28 04:30:11 25 4
gpt4 key购买 nike

我在使用 AngularJS 编写动态结构时遇到问题。我基本上有一个树结构,它可以递归到无穷大。我需要根据这棵树构建一个 HTML 页面,其中树的每个节点都需要根据其类型由特定的 HTML 模板显示。通过使用ng-repeatng-include除了出现与变量绑定(bind)相关的问题之外,我可以很容易地做到这一点。为了更好地解释这种情况,我将使用一个简化的示例。这是我的 Controller :

function testController($scope,$http,$timeout,$window,$state, Data) {
$scope.blocks = []

block1 = {
"type":"block",
"id":1,
"innerblocks":[],
"html":"block1.html"
}

block21 = {
"type":"block",
"id":21,
"innerblocks":[],
"html":"block2.html"
}
block22 = {
"type":"block",
"id":22,
"innerblocks":[],
"html":"block2.html"
}

block1.innerblocks.push(block21);
block1.innerblocks.push(block22);

$scope.showFromBlock1 = function () {
$scope.blocks = [];
$scope.blocks.push(block1);
}

$scope.showFromBlock2 = function () {
$scope.blocks = [];
$scope.blocks.push(block21);
$scope.blocks.push(block22);
}
}

哪里$scope.blocks代表我的树的根,它有 1 个内部节点( block 1)和 2 个叶子( block 21 和 block 22)。

index.html是:

<!-- all the necessary tags and includes -->
<body ng-controller="testController">

<button ng-click="showFromBlock1()" >From Block1</button>
<button ng-click="showFromBlock2()" >From Block2</button>

<div ng-repeat="block in blocks">
<div ng-include="block.html">
</div>
</div>
</body>

而我的模板是: block1.html

<div>
<div>
BLOCK 1 TYPE: {{block.id}}
<div ng-repeat="innerblock in block.innerblocks">
<div ng-include="innerblock.html">
</div>
</div>
</div>
</div>

block2.html

<div>
<div>
BLOCK 2 TYPE: {{block.id}}
</div>
</div>`

正如您所看到的,如果运行此示例,当按下“From Block2”(意味着 html 应显示从第 2 层的 block 开始的树)时,ID 将正确显示,如 block index 中的变量正确绑定(bind)到 block2.html 中的那个。如果您按“来自 Block1”,您将看到 block里面的变量 block2.html再次绑定(bind) index.html 中的那个,而不是绑定(bind)到 innerblock变量 block1.html ,因此显示“错误”的 id。我知道这是由于命名造成的,但是当存在可以嵌套到另一个模板中的模板时,我如何管理这些递归情况,并且它们应该使用通用变量名?(当然,这是一个可能更复杂的小例子)

最佳答案

不要使用ng-include,而是创建一个具有隔离范围的指令,该指令将使用 block 中的模板。这样您就可以使用通用命名而不会发生任何冲突。

关于javascript - AngularJS 递归 ng-repeat 变量与 ng-include 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44683279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com