2013-12-10 5 views
0

Первый проект, работающий с AngularJS, и я немного застрял, используя список выбора, чтобы либо установить значение по умолчанию для первого параметра для нового, либо если его редактирование выбирает стоимость.AngularJS - выберите, установите значения по умолчанию для Edit/New

У меня есть форму с двумя списками. Заметьте, я думаю, что я ошибаюсь в теге ng-options.

invite.tpl.html

<select ng-model="selectedUser" ng-options="user.id as user.user_name for user in users"></select> 
<select ng-model="selectedEvent" ng-options="event.id as event.name for event in events"></select> 

Контроллер, который получает/сообщений JSON.

invite.js

.controller('InviteCtrl', function InviteController($scope, InviteRes, $state, $stateParams) { 
    $scope.inviteId = parseInt($stateParams.inviteId, 10); 
    $scope.users = InviteRes.Users.query(); 
    $scope.events = InviteRes.Events.query(); 

    //EDIT (HAVE ID) - SET SELECTS TO THE USER/EVENT 
    if ($scope.inviteId) { 
    $scope.invite = InviteRes.Invites.get({id: $scope.inviteId}); 
    $scope.selectedUser = $scope.invite.user_id; 
    $scope.selectedEvent = $scope.invite.event_id; 
    } 
    //NEW (NO ID) - SET DEFAULT OPTIONS TO FIRST USER/EVENT 
    else { 
    $scope.selectedUser = $scope.users[0]; 
    $scope.selectedEvent = $scope.events[0]; 
    $scope.invite = new InviteRes.Invites(); 
    } 

Функция сохранения.

$scope.submit = function() { 
    $scope.invite.user_id = $scope.selectedUser; 
    $scope.invite.event_id = $scope.selectedEvent; 
    //IF ID - UPDATE ELSE NEW 
    if ($scope.inviteId) { 
     $scope.invite.$update(function(response) { 
     $state.transitionTo('invites'); 
     }, function(error) { 
     $scope.error = error.data; 
     }); 
    } 
    else { 
     $scope.invite.$save(function(response) { 
     $state.transitionTo('invites'); 
     }, function(error) { 
     $scope.error = error.data; 
     }); 
    } 
    }; 

И получать эти ресурсы

.factory('InviteRes', function ($resource) { 
    return { 
    Invites: $resource("../invites/:id.json", {id:'@id'}, {'update': {method:'PUT'}, 'remove': {method: 'DELETE', headers: {'Content-Type': 'application/json'}}}), 
    Users: $resource('../users.json'), 
    Events: $resource('../events.json'), 
    }; 
}) 

Я посмотрел вокруг и нашел несколько статей, объясняющих, как это сделать, но все, что я попытался было либо дал мне проблемы, либо с установкой значений, или сохраняя форму.

ответ

1

API-интерфейс ресурса не возвращается немедленно - см docs для следующего утверждения:

Важно понимать, что вызов метода объекта $ ресурса немедленно возвращает пустую ссылку

Возможно, вы пытаетесь присвоить значение до его доступности?

Не могли бы вы изменить свой код, чтобы что-то вроде следующего содержания:

if ($scope.inviteId) { 
    $scope.invite = InviteRes.Invites.get({id: $scope.inviteId}, function() { 
     $scope.selectedUser = $scope.invite.user_id; 
     $scope.selectedEvent = $scope.invite.event_id; 
    }); 
} 

С точки зрения выбора директивы, я предпочитаю использовать объекты, а не значения, например,

<select ng-model="selectedUser" ng-options="user.user_name for user in users"></select> 
// in controller: 
$scope.selectedUser = $scope.users[1]; 
+0

Вау - большое вам спасибо, что исправил его - очень хорошо знать, что нужно идти вперед! – OHope

+0

Без проблем! :-) – natwallbank

Смежные вопросы