2016-09-21 13 views
0

私は、ユーザーが3つのオプションのいずれかを選択するドロップダウンを持っています。それらの選択に基づいて、コントローラ内でイベントオブジェクトの2つのプロパティの値を設定する関数が起動されます。角度オブジェクトの値に基づいたプリセットドロップダウン

これは、ドロップダウンです:

<select type="text" id="private_gallery" class="form-control" ng-model="gallerySetting" ng-options="setting for setting in gallery_settings" ng-change="setGalleryType(gallerySetting)"> 
    </select> 

これは、ドロップダウンを移入コントローラからのコードです:

$scope.gallery_settings = ['Public', 'Private', 'Hidden']; 

パブリック、プライベートまたは非表示を選択した場合、それらはsetGalleryTypeに渡されこれは次のようになります。

$scope.setGalleryType = function (galleryType) { 
    switch (galleryType) { 
     case 'Public': 
     $scope.event.private_gallery = 0; 
     $scope.event.active = 1; 
     break; 
     case 'Private': 
     $scope.event.private_gallery = 1; 
     $scope.event.active = 1; 
     break; 
     case 'Hidden': 
     $scope.event.private_gallery = 0; 
     $scope.event.active = 0; 
     break; 
    } 
    }; 

これはすべてex pected。問題は、アプリケーションが再読み込みされるときです。 gallerySettingモデルはバックエンドに格納されていないため、ドロップダウンに正しいオプションが設定されなくなりました。これはユーザーにとって非常に混乱し、設定が適切に保存されなかったとみなされます。

何とかevent.private_galleryevent.activeの値に基づいてドロップダウンを設定する必要があります。私は以下のコードを試してみましたが、ドロップダウンはその後角度として認識された後には、スコープの問題と何が発生します。これを行うに基づいて、途中で

$scope.setGallerySetting = function() { 
    if ($scope.event.private_gallery == 0 && $scope.event.active == 1){ 
     return 'Public'; 
    } ... 
    }; 

$scope.gallerySetting = $scope.setGallerySetting(); 

任意の考え?

答えて

0

私は、コントローラにこれを追加することができました:

var setGallerySetting = function() { 
    if ($scope.event.private_gallery == 0 && $scope.event.active == 1){ 
     $scope.gallerySetting = 'Public'; 
    } else if ($scope.event.private_gallery == 1 && $scope.event.active == 1){ 
     $scope.gallerySetting = 'Private'; 
    } else { 
     $scope.gallerySetting = 'Hidden'; 
    } 
    }; 

    $scope.$watch('event.active', setGallerySetting); 
    $scope.$watch('event.private_gallery', setGallerySetting); 

これはevent.activeへの変更やevent.private_galleryモデルのルックスを見て、それに応じてgallerySettingモデルを設定します。これは非効率的なやり方です。アプリケーションの実行時に一度だけ実行する必要があるため、改善に関する提案があれば歓迎されます。

関連する問題