2015-10-16 2 views
0

творю андроид приложение, использующее Ионную, который имеет статические пользователей JSON записей данных, которая выглядит так:как обновить запись JSON в ионном по идентификатору

serv.factory('Records', function(){ 
     var users = [{ 
     id: 0, 
     profilePic: 'img/pic4.jpg',  
     username: 'admin', 
     password: 'admin', 
     fname: 'first Name', 
     lastName: 'Last Name', 
     email: '[email protected]' 
     }, { 
     id: 1, 
     profilePic: 'img/pic3.png',  
     username: 'user', 
     password: 'user', 
     fname: 'First Name', 
     lastName: 'Last Name', 
     email: '[email protected]', 
     }]; 

    return { 
    all: function(){ 
     return users; 
    }, 
    remove: function(user) { 
     users.splice(users.indexOf(user), 1); 
    }, 
    get: function(userId) { 
     for (var i = 0; i < users.length; i++) { 
     if (users[i].id === parseInt(userId)) { 
      return users[i]; 
     } 
     } 
     return null; 
    } 
    }; 

});

У меня есть модальный вид, который имеет входной текст со следующими значениями в приведенной выше записи. Теперь я пытаюсь обновить запись, получив все значения через ng-click = «updateUser (user)» и передав данные контроллеру. Моя функция контроллера заключается в следующем:

$scope.updateUser = function(user){ 

    $scope.users.push({id : user.id, profilePic: user.profilePic, username: user.username, password: user.password, fname: user.fname, lastName: user.lastName, email: user.email, dob: user.dob}); 

Records.remove(user); 

    $scope.modal.hide(); 

    }; 

это действительно работает, потому что я только что создал новый массив внутри пользователей и удаление записи других пользователей, где ID равно, что я вставил, а запись я вставила изменил свою позицию в нижней части моего списка отображения записей. Что я хочу знать, так это, есть ли вообще (возможный способ), что я могу обновить запись, не испортив вещи? например, когда я просматриваю вторую запись, она смешивает некоторые данные с первой записью :(Я просто хочу иметь обновление, подобное обновлению запроса базы данных FROM, где ID = ID, что-то вроде этого.

Я получаю обновить здесь, на мой взгляд:

<ion-view view-title="Account"> 
    <ion-content can-swipe="true"> 

     <ion-list can-swipe="true"> 
     <ion-item class="item-remove-animate item-avatar item-icon-right" ng-repeat="user in users | orderBy:'id'" type="item-text-wrap" href="#/tab/account/{{user.id}}"> 
     <img ng-src="{{user.profilePic}}" style="width: 64px; height: 64px"> 
     <h2>{{user.username}}</h2> 
     <p>{{user.password}}</p> 
     <i class="icon ion-chevron-right icon-accessory"></i> 

     <ion-option-button class="button button-assertive" ng-click="remove(user)"> 
      Delete<!-- <i class="icon ion-android-delete"></i> --> 
     </ion-option-button> 
     <ion-option-button class="button button-positive" ng-click="openModal(user.id)"> 
     Edit<!-- <i class="icon ion-edit"></i> --> 
     </ion-option-button> 
     </ion-item> 
     </ion-list> 

    </ion-content> 
</ion-view> 

<script id="my-modal.html" type="text/ng-template"> 
    <ion-modal-view> 
    <ion-header-bar class="bar bar-header bar-calm"> 
      <button class="button button-clear button-primary" ng-click="modal.hide()"><i class="icon ion-android-close"></i></button> 
    </ion-header-bar> 
    <ion-content > 

    <form name="form" ng-model="form"> 
     <ion-list> 
     <input type="hidden" ng-model="user.id"> 
     <label class="item item-input"> 
      <span class="input-label">Username</span> 
      <input type="text" value="{{user.username}}"> 
     </label> 
     <label class="item item-input"> 
      <span class="input-label">Current Password</span> 
      <input type="password" value="{{user.password}}"> 
     </label> 
     <label class="item item-input"> 
      <span class="input-label">New Password</span> 
      <input type="password" ng-model="user.newPass"> 
     </label> 
     <label class="item item-input"> 
      <span class="input-label">Confirm Password</span> 
      <input type="password" ng-model="user.confPass"> 
     </label>   
     <label class="item item-input"> 
      <span class="input-label">First Name</span> 
      <input type="text" value="{{user.fname}}" > 
     </label> 
     <label class="item item-input"> 
      <span class="input-label">Last Name</span> 
      <input type="text" value="{{user.lastName}}" > 
     </label> 
     <label class="item item-input"> 
      <span class="input-label">Email</span> 
      <input type="text" value="{{user.email}}" > 
     </label> 
     <label class="item item-input"> 
      <span class="input-label">Date of Birth</span> 
      <input type="text" value="{{user.dob}}"> 
     </label> 
     </ion-list> 
      <button class="button button-full button-positive" ng-click="updateUser(user)">Update</button> 
    </form> 

    </ion-content> 
    </ion-modal-view> 
</script> 

ответ

0

Не уверен, что если вы делаете частичное обновление или полная, но я предполагаю, что вы делаете полное обновление другой вопрос, где вы получаете информацию об обновлении от.? , для краткости я собираюсь предположить, что вы получаете информацию от внешнего источника либо из формы на странице, либо по вызову ajax.

Вы можете обновить пользователя, перейдя через массив пользователей и ищем пользователя с тем же идентификатором, что и обновленная информация. затем просто установите этого пользователя в новую обновленную информацию. Этот метод заменит всю информацию.

Нечто подобное:

$scope.updateUserFull = function(updatetUser){ 


     for (var i = 0; i < $scope.users.length; i++) { 

      if ($scope.users[i].id === updatetUser.id) { 

        $scope.users[i] = updatetUser; 
      } 

     } 

     //console.log($scope.users.indexOf(user), user, index); 
    }; 

Тогда, чтобы держать все в порядке использовать OrderBy фильтр

ng-repeat="user in users | orderBy:'id'" 

Если вы пытаетесь обновить массив пользователя из списка, созданного в нг-повторе , то вы можете сделать это

$scope.updateUserFullFromNgRepeat = function(updatedUser, index){ 

    var idx = index; 
    var usr = user; 


    $scope.users[idx] = usr; 
}; 

И передать т он индекс, как этот

updateUserFull(user,$index) 

если вы пытаетесь частичного обновления решение вывешен cfprabhu должен работать

Вот это рабочая шлепнуть Demo

http://plnkr.co/edit/rJDKKfdRYJ0NB2iI6PVY?p=preview

v2

http://plnkr.co/edit/ms3QHkxfmJsqxJ6ILMeI?p=preview

+0

Хорошо, что помогло в изменяя представление. Спасибо, а как насчет части обновления? – aintno12u

+0

, когда вы говорите, что обновление вставляет нового пользователя в ваш массив пользователей или вы меняете данные на существующего пользователя? – TimCodes

+0

изменение данных на существующего пользователя – aintno12u

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