2016-07-21 10 views
0

私はangularjs-app内のいくつかの変数に苦労しています。

サーバー向けの「チャンネル」を持つ「モジュール」を視覚化し、そのチャンネルを非表示にすることができます。私はそのチャンネルをダブルクリックしてチャンネルポップアップでチャンネルを隠したいのですが。

角度-コントローラスニペット:

$scope.dblclick = function(chid) { 
    $scope.chclicked = chid; 
    $scope.hidden = $scope.moduledata.channels[chid].hidden !== 0 ? true : false; 
    $scope.popupvisible = true; 
}; 

$scope.popupok = function() { 
    $scope.moduledata.channels[$scope.chclicked].hidden = $scope.hidden === true ? 1 : 0; 
    $scope.popupvisible = false; 
}; 

$scope.popupcancel = function() { 
    $scope.popupvisible = false; 
}; 

$scope.closePopup = function() { 
    $scope.popupvisible = false; 
}; 

ポップアップを表示する前に、私は(私がしようとする)ポップアップを閉じるときにそれらへのアクセスを持っているために、現在の'hidden'値とchannel-idを設定します。

ポップアップのチェックボックスにはng-model="hidden"が設定されています。

moduledataの隠れた値が更新/変更されず、$scope.hiddenは常にすべてのチャンネルのチェックボックスの最後の値をポップアップに保持するという問題があります。

$scope.chclickedでも問題ありません。

Plunk私の問題を視覚化しました。

答えて

1

あなたの意見に基づいてthe following Plunkerをご覧ください。

ng-includeが新しい範囲を作成しました。そのため、ポップアップテンプレートのng-modelにはhiddenを使用できません。

あなたが必要

ng-model="moduledata.channels[chclicked].hidden" 

編集1

popupオブジェクトがhidden変数を含むポップアップに関連するすべての情報を格納するために作成されています。

次に、ポップアップテンプレートに

$scope.popup = { 
    visible: false, 
    url: 'channeleditpopup.html', 
    hidden: false 
}; 
popupok機能で

ng-model="popup.hidden" 

dblclick機能で

$scope.moduledata.channels[$scope.chclicked].hidden = $scope.popup.hidden ? 1 : 0; 

$scope.popup.hidden = false; 
+1

それはで言われています@Appeiron [Angular JS documこのディレクティブが新しい​​スコープを作成し、優先順位レベル400で実行されることを確認します( –

+0

)。しかし、今すぐ自分のチャンネルをすぐに非表示/非表示にします。 「OK」をクリックしたときにのみ変更を適用したい – Draz

+0

@Draz Plunkerを更新しました。それを見てください。 –