Angularjs 为什么在angular中使用ng src时必须使用表达式?

Angularjs 为什么在angular中使用ng src时必须使用表达式?,angularjs,Angularjs,ng src='{item.img[0]}' 当 其他指令只接受一个字符串,如ng show='item.val' 我不知道为什么在某些情况下使用表达式,为什么在其他情况下使用字符串?这只是它的实现方式 选择使用插值表达式的原因是它允许您执行以下操作: ng-src="http://my.generic.url/some/resource/{{IDdefinedInScope}}" 如果不使用插值,则必须执行以下任一操作: ng-src="'http://my.generic.url/som

ng src='{item.img[0]}'

其他指令只接受一个字符串,如ng show='item.val'


我不知道为什么在某些情况下使用表达式,为什么在其他情况下使用字符串?

这只是它的实现方式

选择使用插值表达式的原因是它允许您执行以下操作:

ng-src="http://my.generic.url/some/resource/{{IDdefinedInScope}}"

如果不使用插值,则必须执行以下任一操作:

ng-src="'http://my.generic.url/some/resource/' + IDdefinedInScope"
或者:

ng-src="someResourceUrl(IDdefinedInScope)"

$scope.someResourceUrl = function (id) {
    return 'http://my.generic.url/some/resource/' + id;
};
(…更冗长、更沉闷、更少陈述。)


当然,这里实现这一点的原因是输出需要一个字符串(而不是一个对象)。
我自己也在想这个问题。追根溯源,让我们回到angular的幼年时代。这是在第一个0.9版本发布之前的大约100次提交

事实证明,没有扩展提交消息,也没有任何问题消息。代码位于的底部,源代码中的注释很少,绝对不是任何类型的文档。以下只是我的猜测,可能并不准确

在angular的早期,他们定义了6种不同的工具:指令、过滤器、格式化程序、标记、验证程序和小部件。在接下来的几次提交中,我发现了以下定义:

  • 指令为DOM元素创建自定义属性,但不向DOM添加元素
  • 小部件可以创建修改现有DOM元素的自定义属性,也可以创建一个全新的DOM元素
  • 过滤器用于格式化显示给用户的数据
  • 格式化程序用于在用于显示的格式和用于存储的格式之间转换数据格式
  • 验证器用于根据定义的类型或模式检查用户输入
  • 标记将DOM元素的内容或部分内容转换为其他文本或DOM元素
此时,指令/小部件使用表达式,标记使用{{interpolation}},过滤器使用管道|插入,格式化程序/验证程序使用纯文本。ng href和ng src属于标记类别

与now(1.3)相比,指令、小部件和标记现在合并为指令。过滤器和格式化程序现在只是过滤器,验证程序位于表单元素的ngModelController中

由于这次迁移,他们不得不决定如何处理加价。他们将许多布尔标记(ng checked/multiple/readonly/selected/disabled)更改为表达式,但决定保留ng src和ng href作为插值。你可以找到


因此,它源于早期的分类,为了简单或向后兼容而保留。

为了方便起见而中断一致性通常对用户来说更为不便。如果在使用what case时不符合逻辑,则强制用户查找语法。回答得好。这里没有破坏一致性。有几个属性指令采用插值表达式。您可能碰巧大部分使用的是不使用的,但是
ngSrc
绝对不是“独一无二的”:)Angular的指令与其他所有人的自定义指令完全相同,他们可以(并且将)使用任何一种形式……至少它适合JS中的其他所有内容,有多种方法可以完成所有事情!