2016-08-13 28 views
1

我在我的玉/哈巴狗文件:角/自舉數據的目標不是評估表達

div(ng-repeat='writing in user.clean_profile.writing_samples track by $index') 
    a(toggle target="collapse" data-target="{{\'#collapse\'+$index+1}}") Link {{$index+1}} 
    iframe.collapse(id="collapse{{$index+1}}" toggleable ng-src='{{preview(writing.url)}}', frameborder='0') 

(等效)

<div ng-repeat="writing in user.clean_profile.writing_samples track by $index"> 
    <a toggle="toggle" target="collapse" data-target="{{'#collapse'+$index+1}}">Link {{$index+1}}</a> 
    <iframe id="collapse{{$index+1}}" toggleable="toggleable" ng-src="{{preview(writing.url)}}" frameborder="0" class="collapse"></iframe> 
</div> 

但是,鏈接沒有正確評估:實際的HTML數據目標元素評估爲{{'#collapse'+ $ index + 1}}而不是0,1,2等。

任何想法?

回答

1

如果該元素已被賦值爲屬性something,那麼綁定到data-something之後將不起作用,反之亦然。

因此,您需要更改target屬性或data-target以啓用綁定。或者在不具有約束力的一個之前放置一個綁定。

此問題的原因以角度方式創建元素的屬性映射。

在角complie.js的周圍line 2081的源代碼:

 nName = directiveNormalize(name.toLowerCase()); 
     attrsMap[nName] = name; 
     if (isNgAttr || !attrs.hasOwnProperty(nName)) { 
      attrs[nName] = value; 
      if (getBooleanAttrName(node, nName)) { 
       attrs[nName] = true; // presence means true 
      } 
     } 

這裏isNgAttr是保持當前的處理屬性是否與ng-前綴的屬性的值。

directiveNormalize函數將消除屬性的'data-'前綴。

因此,現在data-somethingsomething在元素的屬性圖中共享相同的名稱。

通過上面的代碼,屬性的值在attrs將始終保持這兩個第一個

+0

我多麼傻,沒有意識到這一點。謝謝! – intrinsiciwnl

+0

我很抱歉,但在我之前的回答中實際上存在錯誤。我已經更新了它。我誤解了'isNgAttr'的含義。無論是否需要內插,「attrs」都會保留第一個。 – MMhunter

1

Angular2你可以用[attr]

<a toggle="toggle" target="collapse" 
    [attr.data-target]="'#collapse'+$index+1"> 
    Link {{$index+1}} 
</a> 
<iframe id="collapse{{$index+1}}" toggleable="toggleable" 
    [src]="preview(writing.url)" frameborder="0" 
    class="collapse"> 
</iframe> 

也許有人可以幫助這一點,做到這一點。

+0

[attr.data-target] =「'collapse'+ $ index + 1」允許我在引導程序崩潰中使用索引。謝謝! –