2017-02-13 10 views
5

Proszę zapoznać się z moim fragmentem poniżej. Jak mogę uzyskać starą wartość zmienionego modelu, w tym przypadku jest to wiek w vuejs?Vuejs otrzymają starą wartość podczas zmiany wydarzenia

var app = new Vue({ 
 
    el:"#table1", 
 
    data:{ 
 
    items:[{name:'long name One',age:21},{name:'long name Two',age:22}] 
 
    }, 
 
    methods:{ 
 
    changeAge:function(item,event){ 
 
     alert(item.age); 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<table class="table table-cart" id="table1"> 
 
    <thead> 
 
    <tr> 
 
     <th>Name</th> 
 
     <th>Age</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr v-for="(item,index) in items"> 
 
     <td>{{item.name}} :</td>  
 
     <td> 
 
     <input type="text" name="qty" 
 
       v-model="item.age" 
 
       @change="changeAge(item,$event)"> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

Próbuję użyć zegarka, ale nie jestem w stanie znaleźć żadnej pomocy w oglądaniu wieku tablicy elementów.

Odpowiedz

3

Nie można uzyskać starej wartości zmiany elementu zgodnie z wyjaśnieniami here. Również podczas oglądania obiektu, nie można uzyskać starszej wartości, jak wyjaśniono here, dopóki odniesienie do obiektu się nie zmieni.

Aby obejść te można utworzyć obliczana właściwość, która będzie klonem danych items i można umieścić obserwatora na tej nieruchomości komputerowej poznać starą wartość, jak również, Zobacz działający kod poniżej:

var app = new Vue({ 
 
    el:"#table1", 
 
    data:{ 
 
    items:[{name:'long name One',age:21},{name:'long name Two',age:22}] 
 
    }, 
 
    watch:{ 
 
    clonedItems: function(newVal, oldVal){ 
 
     alert(JSON.stringify(newVal)); 
 
     alert(JSON.stringify(oldVal)); 
 
    } 
 
    }, 
 
    computed:{ 
 
    clonedItems: function(){ 
 
     return JSON.parse(JSON.stringify(this.items)) 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://unpkg.com/vue/dist/vue.js"></script> 
 

 
<table class="table table-cart" id="table1"> 
 
    <thead> 
 
    <tr> 
 
     <th>Name</th> 
 
     <th>Age</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr v-for="(item,index) in items"> 
 
     <td>{{item.name}} :</td>  
 
     <td> 
 
     <input type="text" name="qty" 
 
       v-model="item.age"> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

oznacza to, że wszystkie zmiany to wydarzenie zostanie zwolniony. Potrzebuję tylko wystąpienia zdarzenia item.age change. Twoje rozwiązanie jest dobre, ale czy jest jakiś sposób, aby to zrobić? Tak jak w przypadku tworzenia backspace, zdarzenie jest uruchamiane również – madi

+0

@madi jedną opcją może być obliczona właściwość, która zwraca wiek i ma na sobie watcher. – Saurabh

+1

Rzecz jest w obliczonej nieruchomości, nie jesteśmy w stanie uzyskać bieżącego przedmiotu. Więc to jest wat, który myli. Nie mogę uwierzyć, że Vue ma tak duże ograniczenie: – madi

Powiązane problemy