Javascript 绑定到复杂对象的嵌套字段并在AngularJs中提供默认值?
在AngularJs中绑定到复杂对象时,提供默认值的最佳方法是什么 例如:Javascript 绑定到复杂对象的嵌套字段并在AngularJs中提供默认值?,javascript,angularjs,Javascript,Angularjs,在AngularJs中绑定到复杂对象时,提供默认值的最佳方法是什么 例如: var myObj = { bacon: { calories: 9000, expire_date: '...' }, meatball: { calories: 5000, }, }; 并且认为: <p> Bacon: {{myCtrl.myObj.bacon.calories}} kCal and expires on {{myCtrl.myObj.baco
var myObj = {
bacon: {
calories: 9000,
expire_date: '...'
},
meatball: {
calories: 5000,
},
};
并且认为:
<p>
Bacon: {{myCtrl.myObj.bacon.calories}} kCal and expires on {{myCtrl.myObj.bacon.expire_date | date: 'medium'}}
</p>
<p>
Meatball: {{myCtrl.myObj.meatball.calories}} kCal and expires on {{myCtrl.myObj.metaball.expire_date | date: 'medium'}}
</p>
<p>
Egg: {{myCtrl.myObj.egg.calories}} kCal and expires on {{myCtrl.myObj.egg.expire_date | date: 'medium'}}
</p>
培根:{myCtrl.myObj.Bacon.carories}kCal,过期日期为{{myCtrl.myObj.Bacon.expire|date | date:'medium'}
肉丸:{myCtrl.myObj.Meatball.carories}kCal,过期日期为{myCtrl.myObj.metaball.expire|date | date:'medium'}
鸡蛋:{myCtrl.myObj.Egg.carories}kCal,在{{myCtrl.myObj.Egg.expire|date | date:'medium'}过期
我不能保证培根、肉丸子、鸡蛋及其嵌套字段的可用性(实际对象将从服务器请求)
我应该如何在不向用户泄漏undefined/NaN的情况下提供默认值?(我已经看到了
{{A | | B}}
语法,但因为这是嵌套字段,所以我不确定是否可以使用。)Angular真的很聪明!与NaN、undefined或null相反,它选择不显示任何内容。在一个复杂的对象中,可以进行任意多个级别的操作,而不会看到这些丑陋的字符串
此外,如果表达式是真实的,则可以使用指令或其补充语ng hide=“expression”
另外,作为旁注,{{a | B}
如果a未定义,则不使用a或B。它实际上把A通过过滤器B,过滤器B实际上可以做任何事情。有许多默认过滤器,您可以自己设置。退房
更新:在重新阅读您的问题后,您确实想要一个默认值。您可以使用
angular.extend(dest,src)
提供默认对象,并使用服务器响应扩展它。看看吧,Angular真的很聪明!与NaN、undefined或null相反,它选择不显示任何内容。在一个复杂的对象中,可以进行任意多个级别的操作,而不会看到这些丑陋的字符串
此外,如果表达式是真实的,则可以使用指令或其补充语ng hide=“expression”
另外,作为旁注,{{a | B}
如果a未定义,则不使用a或B。它实际上把A通过过滤器B,过滤器B实际上可以做任何事情。有许多默认过滤器,您可以自己设置。退房
更新:在重新阅读您的问题后,您确实想要一个默认值。您可以使用
angular.extend(dest,src)
提供默认对象,并使用服务器响应扩展它。查看这里最简单的解决方案是
{{ myCtrl.myObj.egg.calories || default_value }}
对于每个变量
也就是说,Joel的
angular.extend
解决方案将是最有角度的方法(即不将数据放入HTML中)。这里最简单的解决方案是
{{ myCtrl.myObj.egg.calories || default_value }}
对于每个变量
话虽如此,Joel的
angular.extend
解决方案将是最有角度的方法(即不将数据放入HTML中)。FYI,如果您希望始终向用户显示默认值,我建议使用angular的提供程序(类似注入式服务)跟踪值。@miqid好的,谢谢。我曾计划将其嵌入模板的某个地方,但会看看常量
提供程序能给我什么。仅供参考,如果您希望始终向用户显示默认值,我建议使用Angular的提供程序(类似可注入服务)来跟踪值。@miqid好的,谢谢。我本来打算把这个嵌入到模板的某个地方,但会看看常量
提供者能给我什么。谢谢所有这些选项。我想这就是我所需要的。我漏掉了一根管子,所以实际上我想它是{{A | | B}
。我一定会仔细研究angular.extend
。再次测试我的示例,我想我之所以看到NaN,只是因为其中涉及到一些算术运算,还有一个“日期”过滤器,例如{{terms.obj.test/1000 | date:'medium'}
感谢所有这些选项。我想这就是我所需要的。我漏掉了一根管子,所以实际上我想它是{{A | | B}
。我一定会仔细研究angular.extend
。再次测试我的示例,我想我之所以看到NaN,只是因为其中涉及到一些算术运算,还有一个“日期”过滤器,例如{{terms.obj.test/1000 | date:'medium'}