2017-01-19 5 views
0

私はいくつかのフィールドを持っています。ユーザーが[キャンセル]ボタンを押して編集モードを解除することができます私のコントローラの私の機能は動作しますが、ビュー(Angularjs)は更新されません

<button ng-click="cancelEdit();" ng-show="editable"> 
    <i class="fa fa-remove"></i> Cancel 
</button> 

イベント機能cancelEdit()を呼び出すNGクリックします。この機能で

$scope.cancelEdit = function(){ 
    $scope.editable=false; 
    $scope.jobNameInput = $scope.jobToView.name; 
    $scope.selectedPriority = $scope.jobToView.priority; 
    $scope.jobCommentsInput = $scope.jobToView.comments; 
} 

、私はfalseに編集モードのブール変数を設定し、(編集モードの前に)デフォルト値に私の入力の値を再初期化します。この関数は呼び出しされた後、値はなく、私の見解では、コントローラ用に更新されています

<button ng-click="editable=true;" ng-show="!editable"> 
    <i class="fa fa-edit"></i> Edit 
</button> 

変数編集可能がfalseに設定されている場合、このボタンは表示されます。ですから、私がキャンセルボタンをクリックすると、理論的に、ボタンの編集が表示されなければなりません。なぜこれは当てはまりませんか?

+0

'$ scope.jobNameInput'と他の値をビューにどのようにバインドしているかを表示できますか? $ scope.jobToView.nameの値は何ですか?あなたがスナップしたりplnkrを作ることができれば、それは素晴らしいことでしょう。だから私たちはあなたをより良く助けることができます。 – lealceldeiro

+0

mmm ng-click = "editable = true;"を設定してください。ボタンではなく関数であるので、ng-click = "setEditTrue()"とし、$ scope.setEditTrue = function(){$ scope.editable = true; } –

+2

編集可能な変数を$ scopeのプロパティではなく、オブジェクトのプロパティに置き換えてみてください:buttonEditable = {value:true};次に、あなたのhtlml:ng-click = "buttonEditable。value = true " –

答えて

1

プリミティブは変更不可能です - つまり、その値は関数を呼び出すことで変更できません。

$scope.editableは、プリミティブであるbooleanの変数です。そのため、ビューは更新されません。その値は関数の終了時にのみ変更されます。

ビューに適用するには、をプリミティブ以外の値に変更する必要があります。これは、オブジェクトのプロパティとして設定した場合に実行できます。

など。

$scope.isEditable = { 
    value:false 
} 

次に、そのオブジェクトで遊んでください。あなたのケースでは:

<button ng-click="cancelEdit();" ng-show="isEditable.value"> 
    <i class="fa fa-remove"></i> Cancel 
</button> 

[編集]ボタン:

は、[キャンセル]ボタンを

<button ng-click="isEditable.value=true;" ng-show="!isEditable.value"> 
    <i class="fa fa-edit"></i> Edit 
</button> 

機能:ブール変数の答えをKorteのに

$scope.cancelEdit = function(){ 
    $scope.isEditable.value = false; 
    $scope.jobNameInput = $scope.jobToView.name; 
    $scope.selectedPriority = $scope.jobToView.priority; 
    $scope.jobCommentsInput = $scope.jobToView.comments; 
} 
+0

ありがとうございました!私はプリミティブ型が更新可能でないことを知らなかったし、入力の点では何か考えていますか?この場合、私はjobToViewオブジェクトを使用しています –

+0

'job = {name – Korte

+0

私のjobToViewオブジェクトはすでに私のビューで使用していますが、私がcancelEdit関数をステップ実行すると、自分の入力値はすでに私のデフォルト値と同じです。彼は私が時間を作った変更を見ないかのように彼らは編集された。ディスプレイを持っている間、私の機能を渡した後、それは私が行った変更を保持します。 –

0

感謝。 完了するために、入力に関して、私は私の質問に対する答えを見つけました。コントローラーで単に宣言する:var vm = this;;

そして単に、入力のモデルでは、書き込み:ng-model="vm.jobCommentsInput"

私は入力が私のブール変数として考えていると思うし、彼らがオブジェクトである必要があります。

関連する問題