2013-10-24 44 views
0

我在將select元素的選項列表中的項目設置爲selected時遇到問題。我的服務器後端是Django 1.5,TastyPie作爲API。在ng-options中使用ng-model,在AngularJS中使用Restangular

模板(簡化的)

<select 
    ng-model='dataService.major_minor.department' 
    ng-options='d.name for d in dataService.departments' 
    name='department' 
    class='select2' 
    required> 
</select> 

數據服務

majorMinor.factory('dataService', function($rootScope, Restangular) { 
    var self = {}; 

    self.degrees = []; 
    self.departments = []; 
    self.major_minor = false; 
    self.majors_and_minors = []; 

    self.fetch_degrees = function() { 
     Restangular.all('degree').getList().then(function(results) { 
      self.degrees = results; 
     }); 
    }; 

    self.fetch_departments = function() { 
     Restangular.all('department').getList().then(function(results) { 
      self.departments = results; 
     }); 
    }; 

    self.fetch_major_minor = function(majorMinorID) { 
     Restangular.one('major-minor', majorMinorID).get().then(function(result) { 
      self.major_minor = result; 
     }); 
    }; 

    self.fetch_major_minor_list = function() { 
     Restangular.all('major-minor').getList().then(function(results) { 
      self.majors_and_minors = results; 
     }); 
    }; 

    self.fetch_degrees(); 
    self.fetch_departments(); 
    self.fetch_major_minor_list(); 

    return self; 
}); 

的控制器

majorMinor.controller('EditCtrl', 
    function($scope, $routeParams, dataService) { 

     $scope.dataService = dataService; 
     $scope.dataService.major_minor = false; 
     $scope.dataService.fetch_major_minor($routeParams.majorMinorID); 
    } 
); 

我正在努力解決的問題是major_minor.department是一個外鍵。 TastyPie正在返回一個完整的對象,所以它不僅僅是部門的URI。 dataService.departments數組是該用戶可用的所有部門的數組。如果您將major_minor.department與dataService.departments [indexOfDepartment]進行比較,它們將是平等的。

爲什麼ng-model沒有正確選擇ng選項?我對Angular/Restangular的理解可能存在差距,因爲這只是我的第二個使用兩者的項目。

+0

您是否嘗試將靜態對象發佈到服務中並以您的方式加載它? –

+0

@MaximShoustin我還沒有。有了Angular的數據綁定,我不確定它會有什麼不同。我可以嘗試一下,然後回報。 –

+0

爲選項使用靜態對象似乎沒有解決任何問題。 –

回答

2

傑克,我遇到了類似的問題,並能夠通過調整NG選項

<select 
    ng-model='dataService.major_minor.department.id' 
    ng-options='d.id as d.name for d in dataService.departments' 
    name='department' 
    class='select2' 
    required> 
</select> 

然後我改變了我的角度服務於dataservice.major_minor.department從對象的改變來解決它我發佈到我的快遞ReSTful服務之前的ID。這應該會讓你在有效載荷中穿越網絡的外鍵,而不是非規範化的對象。這是一個coffeescript服務,與您正在使用的工廠方法有點不同。

save: (major_minor) -> 
     major_minor.department = major_minor.department?._id 
     @$http.post("/api/major_minor/", major_minor) 

的angularjs文檔說起這在NG-選項部分在這裏:https://docs.angularjs.org/api/ng/directive/select

希望幫助,運行到這個問題,尤其是未來的搜索。

+0

這可能應該是'd.id d.name for dataService.departments'中的d(添加了「as」)? –

+0

大抓@JasonSwett,我已經更新了我的答案。 – SRMelody