Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绑定到复杂对象的嵌套字段并在AngularJs中提供默认值?_Javascript_Angularjs - Fatal编程技术网

Javascript 绑定到复杂对象的嵌套字段并在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

在AngularJs中绑定到复杂对象时,提供默认值的最佳方法是什么

例如:

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'}