2016-06-01 18 views
0

ディレクティブを複数回使用したい。私のボタンをクリックするたびに、それに応じてテンプレートが更新されます。 Intially $ scope.itemはitem.idが、私は今、次のように結果が4にitem.idを変更するボタンをクリックすると、そのためにはAngularJsディレクティブ複数回発行

enter image description here

として次を表示1. =含まれています。

enter image description here

しかし、あなたが見るように、表示される初期ITEM1はITEM4に変更されました。

最初にitem1を表示し、ボタンをクリックして、表示された初期値を変更せずにitem4を表示したいとします。どうすればこれを達成できますか?

私はあなたがコントローラでDOM操作を行うことを避けるようにしてください私のコントローラ

function MyCtrl($scope,$compile) { 
    $scope.item = {id: 'item1'};  
    $scope.hello = function() { 
     $scope.item = {id: 'item4'}; 
     var dialogTextHTML ="<my-directive item ='item'></my-directive>" 
     var compiledDialogData = $compile(dialogTextHTML)($scope); 
     document.getElementById('mycontainer').appendChild(compiledDialogData[0]); 
    } 
} 

マイHTML

<div ng-controller="MyCtrl"> 
<button ng-click="hello()"> 
Click here 
</button> 
    <div id='container'> 
    <my-directive item='item'></my-directive> 
    </div> 
</div> 
+0

スコープは隔離されていますか? https://thinkster.io/egghead/isolate-scope-at –

+0

こんにちは、使用しているAngularJSのバージョンを1.5以下に追加してください。 http://plnkr.co/にケースサンプルを追加できますか? これはサービス/ファクトリですべてのロジックが改善できると思うが、1つの点がわからない: ボタンをクリックするたびに項目がリストに追加されますか? 最初のクリック= item1 2番目のクリック= item1、item4 3番目のクリック= item1、item4、itemX –

+0

私はAngularJs 1.5を使用しています。ボタンをクリックするたびに、新しい項目を追加します。 $ click.itemの値はクリックごとに変わり、以前の値を変更せずに更新された値を表示する必要があります。 – ASR

答えて

1

次のディレクティブ

var app = angular.module('myApp', []); 
app.directive('myDirective', function() { 
    return { 
     restrict: 'AE', 
     scope:true, 
     template: '<div>{{ item.id }}</div>' 
    } 
}); 

を持っている - それは、「角度ではありません方法"。この場合

は、私が <my-directive>にNG・リピートを使用します。

<my-directive ng-repeat="item in items" item='item'></my-directive> 

を次にクリックするたびに、単に項目のリストに項目を追加します。

function MyCtrl($scope, $compile) { 
    $scope.items = []; 

    var idCount = 0; 

    function addItem() { 
    idCount += 1; 
    $scope.items.push({ 
     id: 'item' + idCount 
    }); 
    } 

    $scope.hello = function() { 
    addItem(); 
    } 

    addItem(); 
} 

の作業jsfiddle:https://jsfiddle.net/ub3zmo9s/1/

+0

いいえ、$ scope.itemはルートが呼び出されるたびに更新されるので、私はコントローラでdom操作を行いたいと思います。表示されている前回の値を保持し、新しい値をDOMに動的に追加します。 – ASR

+0

最初の呼び出しはitem1を返します。これがユーザーに表示されます。 2回目に、返された値がDOMに追加されなければならないitem2である可能性があります。 – ASR

+0

さて、あなたが達成しようとしていることを誤解しました... – Strille

関連する問題