0

ディレクティブを使用しているときに、スコープの概念に苦労しています。公式 ドキュメントや半ダースのブログなどを読みましたが、これを行うことができません。

テキスト入力用に 5 つのフィールドがあります。私が達成したいのは、1つのフィールドが満たされている場合、次の兄弟が表示されることです:

<table>
    <tr ng-repeat="entry in activeField.entries">
        <td entry-value contenteditable="">{{entry.value_0}}</td>
        <td entry-value contenteditable="" ng-show="entry.value_0">{{entry.value_1}}</td>
        <td entry-value contenteditable="" ng-show="entry.value_1">{{entry.value_2}}</td>
        <td entry-value contenteditable="" ng-show="entry.value_2">{{entry.value_3}}</td>
        <td entry-value contenteditable="" ng-show="entry.value_3">{{entry.value_4}}</td>
    </tr>
</table>

これが私の指示ですentryValue

terminal.directive('entryValue',function(){
return{
    restrict: 'A',
    controller: 'terminalController',
    link: function(scope, element){

        element.bind('input',function(){              
            // Here i want to update the scope
        })
    }
  }
});

ユーザーが入力を行うと、オブジェクトの activeField を含むコントローラーのスコープにその値をプッシュしたいと考えています。$watch をディレクティブ リンク関数にバインドしようとしましscope.$apply()たが、どちらも機能しません。

助けていただければ幸いです

4

1 に答える 1

1
<tr ng-repeat="entry in activeField.entries">
    <td entry-value contenteditable="" 
     ng-hide="!$first && !activeField.entries[$index-1].value">{{entry.value}}</td>
</tr>

app.directive('entryValue',function(){
return{
    replace: true,
    controller: 'terminalController',
    template: '<div><input ng-model="entry.value"></div>',
    link: function(scope, element){
    }
  }
});

$scope.activeField = {entries: 
  [ {value: ''}, {value: ''}, {value: ''}, {value: ''}, {value: ''} ] };

fiddle

于 2013-07-12T16:19:28.703 に答える