2017-02-13 7 views
0

私はAngular 2に奇妙な問題があります - おそらくバグですか? - 同じHTMLタグ内でテンプレート内の同じ変数を2回印刷できない場所。Angular 2のHTMLタグで同じ変数を2回使用することはできませんか?

以下のコードは、判読不能なエラーを示しています。

<div class="panel panel-default" *ngFor="let trust of trusts"> 
     <div class="panel-heading" role="tab" id="name{{trust.id}}"> 
      <h4 class="panel-title"> 
       <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{{trust.id}}" aria-expanded="true" aria-controls="collapse{{trust.id}}"> 
        {{trust.name}} 
       </a> 
      </h4> 
     </div> 
     <div id="collapse{{trust.id}}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="name{{trust.id}}"> 
      <div class="panel-body"> 
       TBC 
      </div> 
     </div> 
    </div> 

ただし、このコードは正常に動作します。見て明らかなように

<div class="panel panel-default" *ngFor="let trust of trusts"> 
     <div class="panel-heading" role="tab" id="name{{trust.id}}"> 
      <h4 class="panel-title"> 
       <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse{{trust.id}}" aria-expanded="true" aria-controls="collapse1"> 
        {{trust.name}} 
       </a> 
      </h4> 
     </div> 
     <div id="collapse{{trust.id}}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="name1"> 
      <div class="panel-body"> 
       TBC 
      </div> 
     </div> 
    </div> 

、コードの第一及び第二のブロックとの間の唯一の違いは、第二の、作業ブロックに、私は2つのHTMLに{{trust.id}}への第2の参照を削除したことですタグ。

以下

はエラー...

consoleError — zone.js:420Unhandled Promise rejection: (8) 
"Template parse errors: 
Can't bind to 'aria-controls' since it isn't a known property of 'a'. (\"\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapse{{trust.id}}\" aria-expanded=\"true\" [ERROR ->]aria-controls=\"collapse{{trust.id}}\"> 
         {{trust.name}} 
        </a> 
\"): [email protected]:139 
Can't bind to 'aria-labelledby' since it isn't a known property of 'div'. (\"</h4> 
      </div> 
      <div id=\"collapse{{trust.id}}\" class=\"panel-collapse collapse\" role=\"tabpanel\" [ERROR ->]aria-labelledby=\"name{{trust.id}}\"> 
       <div class=\"panel-body\"> 
        TBC 
\"): [email protected]:83" 
"; Zone:" 
"<root>" 
"; Task:" 
"Promise.then" 
"; Value:" 
SyntaxError 
"[email protected]://localhost:4200/vendor.bundle.js:64381:20 [<root>] 
[email protected]://localhost:4200/vendor.bundle.js:5720:21 [<root>] 
[email protected]://localhost:4200/vendor.bundle.js:17586:82 [<root>] 
[email protected]://localhost:4200/vendor.bundle.js:47577:73 [<root>] 
[email protected][native code] [<root>] 
[email protected]://localhost:4200/vendor.bundle.js:47460:26 [<root>] 
[email protected]://localhost:4200/vendor.bundle.js:47342:37 [<root>] 
[email protected]://localhost:4200/polyfills.bundle.js:5990:49 [<root> => <root>] 
http://localhost:4200/polyfills.bundle.js:6412:60 [<root>] 
[email protected]://localhost:4200/polyfills.bundle.js:6028:57 [<root> => <root>] 
[email protected]://localhost:4200/polyfills.bundle.js:6310:42 [<root>] 
[email protected][native code] [<root>]" 
consoleError — zone.js:420 
_loop_1 — zone.js:449 
drainMicroTaskQueue — zone.js:453 
promiseReactionJob 
consoleError — zone.js:422 
Error 

任意の提案ですか?

+3

あなたはこれらの解読不可能なエラーの少なくとも一部を共有したいですか?多分誰かがそれらを解読することができます。 :) – toskv

+0

@toskvはい!私はそうするつもりだった、申し訳ありません。 –

+0

@toskvメインの投稿にエラーが追加されました。コメントとしては長すぎます。 –

答えて

2

私はそれはそれの代わりに結合性の結合属性、作るために

attr.aria-labelledby="name{{trust.id}}" 

または

[attr.aria-labelledby]="'name' + trust.id" 

されるべきだと思います。

+0

それはうまくいきました、ありがとうございます。その属性が他の属性ではなく、なぜ必要なのか説明できますか?私はid = "name {{trust.id}}"などには使用しません。 Angularはいくつかの属性を自動的に認識し、他の属性は認識しないのでしょうか?本当にattr.id = "name {{trust.id}}"を使用する必要がありますか? –

+0

プロパティは事前定義されており、属性は任意です。いくつかの属性とプロパティは接続され、値を互いに反映します(実際には多くのプロパティまたはほとんどのプロパティにも一致する属性があります)。 'for'はJSキーワードですから、おそらく' 'のようないくつかの例外が属性' htmlFor'に反映されます。もう少し説明http:// stackoverflow。 com/questions/6003819/properties-and-attributes-in-html(より良いものがあるかもしれません) –

関連する問題