2017-02-07 21 views
0

私はAngular Bootstrapで作業していますが、実際にはModalを使ってモデルを正しく更新しようとしています。Angular Bootstrapモーダルバインディングの問題

ここでは非常に簡単なコードです:

コントローラ:

function open(room) { 
    var roomModal = $uibModal.open({ 
    templateUrl: 'room-modal.html', 
    controller: 'RoomModalController', 
    controllerAs: 'modal', 
    resolve: { 
     room: room 
    } 
    }); 

    roomModal.result.then(function (response) { 
    RoomsService.update({ 
     roomId: response._id 
    }, response).$promise (etc...); 
    }); 
} 

モーダルコントローラー:

var vm = this; 

    vm.room = room; 

    vm.save = function() { 
     $uibModalInstance.close(vm.room); 
    }; 

    vm.cancel = function() { 
     $uibModalInstance.dismiss('cancel'); 
    }; 

基本的に私はそれについていくつかの情報を取得するためのルームを解決してからだが、必要に応じて、モーダル内の部屋に関するいくつかの情報を更新したいと考えています。

いくつかの情報を更新したくない場合や、「閉じる」をクリックしない限りうまくいきます。

いくつかの情報を更新して「閉じる」をクリックした場合、情報はデータベース上で更新されていませんが、メインビューで更新されています...角型情報メインビューに、私は別々のスコープ(VM)にこれらの情報を渡しているので...

は、それは非常に奇妙であると私はクリックしない場合を除き...私はこの振る舞いを期待すべきではありません

を保存する何私はここで間違っていますか?

+0

入力でバインドされたデータ( '$ scope.objname')を' ng-models'として使用している場合、これらのバインディングは値の変更時に自動的に変更されます。私が見ることができる限り、 'room'オブジェクトはスコープオブジェクトを使用する可能性のある関数呼び出し側を渡されます。これを防ぐために、(手動アクションの変更を処理するための)別のスコープ変数を作成することができます。 –

+0

私は '$ socpe'ではなく' vm'形式を使用しています。ありがとう –

+0

これは同じことですが、 '$ scope'ではなく、あなたのバインディングオブジェクトの名前は単に' vm'です。ダイジェストサイクルとバインド方法は変更されません。 –

答えて

1

​​ディープコピーでroomオブジェクトを更新するときにモデルが更新されないようにすることもできます。

vm.room = angular.copy(room); 

今、このオブジェクトは、モーダル結合の世話をすると、あなたのルートスコープvm.roomオブジェクトに変更されたときには干渉しません。

このデータの保存を完了するには、vm.rootモーダルオブジェクトをデータベースに保存し、モーダルでのこれらの変更に応じてルートスコープvm.roomオブジェクトを更新する必要があります。

+0

驚くべきことに、それを理解するのを助けました:' angular.copy' madeトリック!ご協力いただきありがとうございます! –

+0

それはあなたを助けました! :) –

関連する問題