我有一个显示在模式上的患者的卡号列表。如果卡被设置为默认卡,那么它应该有一个灰色的背景 - 这是基于对象的值为true。
<td ng-repeat="obj in paymentAndShipping">
<div ng-click="setDefaultPaymentMethod(obj.ElectronicPaymentAccountType, obj.ElectronicPaymentAccountID)" ng-class="{'chosencard' : obj.PreferredAccount }">
<span ng-show="obj.PreferredAccount" class="glyphicon glyphicon-ok"></span>
<p>{{obj.ElectronicPaymentAccountType}} {{trimCardNum(obj.CreditCardNumber)}}</p>
<p>Exp: {{obj.ExpirationDate}}</p>
</div>
</td>
重要部分:
ng-class="{'chosencard' : obj.PreferredAccount }"
相关的CSS:
.chosencard {
background-color: @gray-lighter;
}
在这里你可以看到我迭代了数组并使用ng-repeat检索对象,然后在表格单元格内的div上应用ng-class,以确定是否应用了样式。
以下是该行为的屏幕截图。
PS:当我点击一个单独的div时,除了我单击的div之外,灰色背景会从其他所有其他div中删除。在上面看到的四个对象中,只有其中一个具有真值,这是最后一张牌。
正常的赋值操作将简单地将新变量指向现有对象。解释浅拷贝和深拷贝之间的区别:
浅复制和深度复制之间的区别仅适用于复合对象(包含其他对象的对象,如列表或类实例):
下面是一个小小的演示:
import copy
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]
使用正常分配操作复制:
d = c
print id(c) == id(d) # True - d is the same object as c
print id(c[0]) == id(d[0]) # True - d[0] is the same object as c[0]
使用浅拷贝:
d = copy.copy(c)
print id(c) == id(d) # False - d is now a new object
print id(c[0]) == id(d[0]) # True - d[0] is the same object as c[0]
使用深拷贝:
d = copy.deepcopy(c)
print id(c) == id(d) # False - d is now a new object
print id(c[0]) == id(d[0]) # False - d[0] is now a new object
对于不可变对象,不需要复制,因为数据永远不会改变,因此Python使用相同的数据;ID总是相同的。对于可变对象,因为它们可能会更改,浅层复制创建一个新对象。
深拷贝与嵌套结构有关。如果有列表,则深度复制copies
嵌套列表也是,因此它是一个递归副本。使用复制,有一个新的外部列表,但内部列表是引用。
任务不复制。它简单地设置了对旧数据的引用。因此,需要复制来创建一个具有相同内容的新列表。