2017-12-05 8 views
0

私はカスタムディレクティブを持っていますが、ngRepeat内で使用する際に問題があります。たとえば、以下の私のtacoの例では、ng-repeat属性にtacoというエイリアスが付けられているオブジェクトは、ディレクティブの定義内からアクセスできないようです。AngularJS:ngRepeat内のカスタムディレクティブの使用

app.tpl.html

<div ng-repeat="taco in tacoController.tacos"> 
    <taco></taco> 
<div> 

taco.directive.js

(function() { 
    angular 
     .module('food') 
     .directive('taco', [ 
      // DI: strings here 
      function(
       // DI: params here 
      ) { 
       return { 
        restrict: 'E', 
        template: ` 
         // THIS WORKS 
         <div>{{ tacoController.lastShipment }}</div> 
         // THIS DOES NOT! 
         <div>{{ taco.shellType }}</div> 
        ` 
       }; 
      } 
     ]) 
})(); 

P.S.可能であれば私のディレクティブで分離スコープを使用しないようにしたいと思います。

答えて

1

tacoControllerにアクセスできるのは、メインページのスコープ内に存在し、カスタムディレクティブに分離スコープがないためです。
tacong-repeatの項目は、メインページのスコープ内に存在しないため、カスタムディレクティブではアクセスできません。

あなたは(あなたがすでにあることを知っているかもしれません)、次のよう指令の孤立範囲で tacoアイテムを渡すことができ

(function() { 
    angular 
     .module('food') 
     .directive('taco', [ 
      // DI: strings here 
      function(
       // DI: params here 
      ) { 
       return { 
        restrict: 'E', 
        scope: { 
         tacoItem: '=', 
         lastShipment: '=' 
        }, 
        template: ` 
         // THIS WORKS 
         <div>{{ lastShipment }}</div> 
         // THIS DOES NOT! 
         <div>{{ tacoItem.shellType }}</div> 
        ` 
       }; 
      } 
     ]) 
})(); 

その後、HTMLは次のようになります。

<div ng-repeat="taco in tacoController.tacos"> 
    <taco taco-item="taco" last-shipment="tacoController.lastShipment"></taco> 
<div> 
+0

だから、私がアクセスしたい場合のように聞こえるが私のディレクティブ内の 'taco'オブジェクトは、分離スコープを使用する方法がありません...? –

+0

ディレクティブが 'taco'オブジェクトにアクセスできるようにするために、メインページのディレクティブまたは共有スコープで独立スコープを持つ必要があるのでしょうか?一般に、ディレクティブが独立したスコープを持つことは、良い習慣です。あなたが外部からのより多くの情報を渡したいなら、あなたはいつもそうすることができます。 – lzagkaretos

+0

私が分離スコープのルートを避けることを望んでいたのは、React w/o Reduxを使用するのと同じような経験をすると思われるからです(つまり、コンポーネント階層の複数のレベルを使って小道具を渡す)。スコープを分離することがベストプラクティスだと私は同意しますが、ReduxやMobXのような状態コンテナを使用していない場合は、API契約をすべて強制します。しかし、あなたの入力をありがとう! –

関連する問題