Angularjs 在指令模板内进行角度插值,有时不进行?

Angularjs 在指令模板内进行角度插值,有时不进行?,angularjs,Angularjs,我将此模板存储在一个文件中,该文件由名为budgetRow的自定义指令中的templateUrl指向: <tr class="item_row" id="{{rowId}}"> <td class="item_cell" id="description"> <input type="text" ng-model='budget.row({{rowId}}).description' > </td> </tr> 当

我将此模板存储在一个文件中,该文件由名为budgetRow的自定义指令中的templateUrl指向:

<tr class="item_row" id="{{rowId}}">
  <td class="item_cell" id="description">
    <input type="text" ng-model='budget.row({{rowId}}).description' >
  </td>
</tr> 

当$scope.rowId设置为10时,这就是在浏览器中渲染的内容

<budget-row>
  <tr class="item_row" id="10">
    <td class="item_cell" id="description">
        <input type="text" ng-model="budget.row({{rowId}}).description"
               class="ng-pristine ng-untouched ng-valid">
    </td>
  </tr>
</budget-row>


为什么“{rowId}”在tr元素中被插值,而不是在td元素中被插值?

ng model
指令中删除插值:

<tr class="item_row" id="{{rowId}}">
  <td class="item_cell" id="description">
    ̶<̶i̶n̶p̶u̶t̶ ̶t̶y̶p̶e̶=̶"̶t̶e̶x̶t̶"̶ ̶n̶g̶-̶m̶o̶d̶e̶l̶=̶'̶b̶u̶d̶g̶e̶t̶.̶r̶o̶w̶(̶{̶{̶r̶o̶w̶I̶d̶}̶}̶)̶.̶d̶e̶s̶c̶r̶i̶p̶t̶i̶o̶n̶'̶ ̶>̶
    <input type="text" ng-model='budget.row(rowId).description' >
  </td>
</tr> 

̶̶
ng model
指令采用AngularJS表达式。无需在AngularJS表达式中进行插值

id
属性不是AngularJS指令。它是普通的HTML,因此要使用插值注入AngularJS表达式

从文档中:

为什么混合插值和表达式是不好的做法:
  • 它增加了标记的复杂性
  • 不能保证它对每个指令都有效,因为插值本身就是一个指令。如果另一个指令在插值运行之前访问属性数据,它将获取原始插值标记,而不是数据
  • 它会影响性能,因为插值会向作用域添加另一个观察者
  • 因为这不是推荐的用法,所以我们不会对此进行测试,对AngularJS core的更改可能会破坏您的代码


budget.row
是返回对象的函数吗?或者您正在尝试传递对象的动态属性名称变量?无论采用哪种方法,都不要使用插值,注意不要将
等元素作为
元素的父元素。某些浏览器会自动关闭元素并忽略关闭标记。我不确定我是否理解此注释。你所说的“元素”是什么意思?例如,你是指作为Angular指令或其他东西的标记吗?tr是Angular的预算行模板的一部分。所以我不应该在模板中包含tr?谢谢。现在我明白了!