2016-09-21 54 views
0

我有一個下拉列表,其中用戶選擇三個選項之一。基於它們的選擇,控制器會觸發一個函數,設置事件對象的兩個屬性的值。基於角度對象的值的預設下拉列表

這是下拉:

<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模型。這是一種效率低下的方式,因爲我們只需要在應用程序運行時運行一次,所以我們將不勝感激任何關於改進的建議。

相關問題