gpt4 book ai didi

angularjs - Angular.js ng-switch-何时不使用动态数据?

转载 作者:行者123 更新时间:2023-12-03 09:04:21 24 4
gpt4 key购买 nike

我试图让 Angular 根据我的数据生成一个 CSS slider 。我知道数据在那里并且能够为按钮生成它,但是由于某种原因,代码不会填充 ng-switch-when。当我检查代码时,我看到了两次(我知道这是正确的,因为我只有两个项目):

<div ng-repeat="assignment in assignments" ng-animate="'animate'" class="ng-scope">
<!-- ngSwitchWhen: {{assignment.id}} -->
</div>

我的实际代码:
<div ng-init="thisAssignment='one'">
<div class="btn-group assignments" style="display: block; text-align: center; margin-bottom: 10px">
<span ng-repeat="assignment in assignments">
<button ng-click="thisAssignment = '{{assignment.id}}'" class="btn btn-primary">{{assignment.num}}</button>
</span>
</div>

<div class="well" style="height: 170px;">
<div ng-switch="thisAssignment">
<div class="assignments">
<div ng-repeat="assignment in assignments" ng-animate="'animate'">
<div ng-switch-when='{{assignment.id}}' class="my-switch-animation">
<h2>{{assignment.name}}</h2>
<p>{{assignment.text}}</p>
</div>
</div>
</div>
</div>
</div>

编辑:这就是我试图模仿的,虽然是动态数据。 http://plnkr.co/edit/WUCyCN68tDR1YzNnCWyS?p=preview

最佳答案

来自 docs

Be aware that the attribute values to match against cannot be expressions. They areinterpreted as literal string values to match against. For example, ng-switch-when="someVal"will match against the string "someVal" not against the value of the expression$scope.someVal.


因此,换句话说,ng-switch 用于模板中的硬编码条件。
你会像这样使用它:
<div class="assignments">
<div ng-repeat="assignment in assignments" ng-animate="'animate'">
<div ng-switch="assignment.id">
<div ng-switch-when='1' class="my-switch-animation">
<h2>{{assignment.name}}</h2>
<p>{{assignment.text}}</p>
</div>
</div>
</div>
现在这可能不完全适合您的用例,因此您可能必须重新考虑您的策略。
Ng-If 可能是您所需要的——另外,您需要注意 "isolated" scopes .基本上,当您使用某些指令(例如 ng-repeat)时,您会创建与其父级隔离的新范围。所以如果你改变 thisAssignment在中继器中,您实际上是在更改特定重复 block 内的变量,而不是整个 Controller 。
这是 demo你要去做什么。
请注意,我将选定的属性分配给 things数组(它只是一个对象)。

2014 年 12 月 12 日更新:添加新代码块以阐明 ng-switch 的使用.上面的代码示例应该被认为是 不是 去做。
正如我在评论中提到的。 Switch 应该被认为与 JavaScript 开关完全一样。它用于硬编码的切换逻辑。因此,例如在我的示例帖子中,只有几种类型的帖子。您应该提前知道要打开的值的类型。
<div ng-repeat="post in posts">
<div ng-switch on="post.type">

<!-- post.type === 'image' -->
<div ng-switch-when="image" class="post post-image">
<img ng-src="{{ post.image }} />
<div ng-bind="post.content"></div>
</div>

<!-- post.type === 'video' -->
<div ng-switch-when="video" class="post post-video">
<video ng-src="{{ post.video }} />
<div ng-bind="post.content"></div>
</div>

<!-- when above doesn't match -->
<div ng-switch-default class="post">
<div ng-bind="post.content"></div>
</div>
</div>
</div>
您可以使用 ng-if 实现相同的功能。 ,您的工作是决定在您的应用程序中什么是有意义的。在这种情况下,后者更简洁,但也更复杂,如果模板更复杂,你会看到它变得更加复杂。基本区别是 ng-switch是声明性的, ng-if势在必行。
<div ng-repeat="post in posts">
<div class="post" ng-class="{
'post-image': post.type === 'image',
'post-video': post.type === 'video'">
<video ng-if="post.type === 'video'" ng-src="post.video" />
<img ng-if="post.type === 'image'" ng-src="post.image" />
<div ng-bind="post.content" />
</div>
</div>

关于angularjs - Angular.js ng-switch-何时不使用动态数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566118/

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