2017-01-27 1 views
0

мой взгляд, как это:Как обновить данные на странице без обновления на vue.js?

<div class="favorite" style="margin-bottom:5px;"> 
    @if (Auth::user()) 
     <add-favorite-store :id-store="{{ $store->id }}"></add-favorite-store> 
    @else 
     <a href="javascript:" class="btn btn-block btn-success"> 
      <span class="fa fa-heart"></span>&nbsp;Favorite 
     </a> 
    @endif 
</div> 

Мой компонент, как это:

<template> 
    <a href="javascript:" class="btn btn-block btn-success" @click="addFavoriteStore($event)"> 
     <span class="fa fa-heart"></span>&nbsp;<label id="favoriteId">{{ store_id == 'responseFound' ? 'Un-Favorite' : 'Favorite' }}</label> 
    </a> 
</template> 

    <script> 
     export default{ 
      props:['idStore'], 
      mounted(){ 
       this.checkFavoriteStore() 
      }, 
      methods:{ 
       addFavoriteStore(event){ 

        var label = $('#favoriteId') 
        var text = label.text() 

        event.target.disabled = true 
        const payload= {id_store: this.idStore} 

        if(text == "Favorite") { 
         this.$store.dispatch('addFavoriteStore', payload) 
        } 
        else { 
         this.$store.dispatch('deleteFavoriteStore', payload) 
        } 

        setTimeout(function() { 
         location.reload(true) 
        }, 1500) 
       }, 
       checkFavoriteStore(){ 
        const payload= {id_store: this.idStore} 
        var data = this.$store.dispatch('checkFavoriteStore', payload) 
        data.then((res) => this.store_id = res) 
       } 
      }, 
      data() { 
       return { 
        store_id: '' 
       } 
      } 
     } 
    </script> 

На мой код выше, я с помощью

location.reload (истинный)

для обновления данных на странице. Но это перезагрузка страницы.

Я хочу, чтобы при обновлении страницы, это не перезагрузите страницу

Как я могу это сделать?

+0

вы можете добавить соответствующий HTML-код, чтобы мы могли это обработать, вам нужно будет найти привязку в VUE. Также объясните, что вы пытаетесь обновить, поэтому мы также можем это сделать для вас. Вы обновляете страницу DONT, вы добавляете переменные привязки, поэтому обновление var в скрипте также обновит varible/html. –

+0

не проблема, но можете ли вы также объяснить, что вы хотите обновить, как в случае, если пользователь делает это, тогда он делает это, и тогда я хочу это сделать, объясню процесс и что должно произойти, вы используете много нормальные js и vue могут hanlde для вас вместо этого –

ответ

1

Ok Вот простой пример использования, но менее сложный, как ваш, и использование vuejs, поскольку оно должно использоваться. (http://codepen.io/simondavies/pen/MJOQEW)

ОК, пусть laravel/php code получит идентификатор магазина, а также если он уже был избран. Таким образом, ваш скрипт сначала не проверяет хранилище, а затем решает, что делать.

Что это делает посылает store-id и is-favorited через компоненты, как:

<favorite :store-id="{{$store->id}}" :is-favorited="{{$store->isFavorited}}"></favorite> 

Затем компонент Вью обновит кнопку для отображения, если его уже понравилось (красный) или нет (серый), и затем также обрабатывать событие click и обновлять соответственно.

Поскольку вы используете Laravel для указания компонента, если он уже используется, вы можете избавиться от своей функции проверки и еще одного HTTP-запроса. Затем вам нужно только обновить хранилище, когда пользователь нажимает кнопку «Избранное».

И как видно на демо, оно обновляется, нет необходимости обновляться.

Я надеюсь, что это поможет вам переписать вашу книгу, чтобы вы получили нужный вам.

PS я опустил вошедший чек @if (Auth::user()) вы так что вы можете положить, что обратно в и т.д.

Vue.component('favorite', { 
 
    template: '<button type="button" @click.prevent="updateFaviteOption" :class="{ \'is-favorited\': isFavorited }"><span class="fa fa-heart"></span></button>', 
 
    props: [ 
 
    'storeId', 
 
    'isFavorited' 
 
    ], 
 
    data: function() { 
 
    return {} 
 
    }, 
 
    methods: { 
 
    updateFaviteOption: function() { 
 
     this.isFavorited = !this.isFavorited; 
 
     ///-- DO YOU AJAX HERE i use axios 
 
     ///-- so you can updte the store the the this.isFavorited 
 
    } 
 
    } 
 

 
}); 
 

 
new Vue({ 
 
    el: '#app', 
 
});
.favorite-wrapper { 
 
    margin: 20px auto; 
 
    padding: 0; 
 
    text-align: center; 
 
    width: 500px; 
 
    height: 100px; 
 
} 
 
a:link, 
 
a:active, 
 
a:visited { 
 
    text-decoration: none; 
 
    text-transform: uppercase; 
 
    color: #444; 
 
    transition: color 800ms; 
 
    font-size: 18px; 
 
} 
 
a:hover, 
 
a:hover:visited { 
 
    color: purple; 
 
} 
 
button { 
 
    margin: 10px auto; 
 
    padding: 8px 10px; 
 
    background: transparent; 
 
    width: auto; 
 
    color: white; 
 
    text-transform: uppercase; 
 
    transition: color 800ms; 
 
    border-radius: 4px; 
 
    border: none; 
 
    outline: none; 
 
} 
 
button:hover { 
 
    cursor: pointer; 
 
    color: #058A29; 
 
} 
 
.fa { 
 
    color: #d9d9d9; 
 
    font-size: 20px; 
 
    transition: color 400ms, transform 400ms; 
 
    opacity: 1; 
 
} 
 
.is-favorited .fa { 
 
    opacity: 1; 
 
    color: red; 
 
    transform: scale(1.4); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css" rel="stylesheet" /> 
 
<div id="app"> 
 

 
    <div class="favorite-wrapper"> 
 
    <favorite :store-id="3" :is-favorited="true"> 
 
    </favorite> 
 
    </div> 
 

 
</div>

0

Theres много то не упомянуто здесь, чтобы помочь ответить на вопрос, как хорошо, как мы могли бы, его потребности HTML, о котором идет речь, какие нужно обновить и то, что и т.д.

Я думаю, что лучше смотреть на это https://laracasts.com/series/learn-vue-2-step-by-step для хорошего понимания того, как работает Vuejs, и как делать простые вещи вроде этого.

Ваше использование углубленного хранилища/кодирования типа VUEX, и если вы не понимаете основ, тогда вам может быть сложно найти ответ для вас.

Извините, что вам немного не нравится.

+0

Я считаю, что вам нужно переписать процесс, как я показывал ранее, на другой пост, так что вы можете реализовать процесс vuejs правильно, попробуете и снова опубликуйте EG с помощью еще большего объяснения –

0

Что вам нужно - vm-forceUpdate.

Внесите экземпляр Vue для повторной обработки. Обратите внимание, что это не влияет на все дочерние компоненты, только сам экземпляр и дочерние компоненты с вставленным слотом.

Я не пробовал использовать это самостоятельно, просто наткнулся на него во время работы над проектом.

vue forceUpdate

или

можно просто вызвать функцию в методе SetTimeout.

setTimeout(function() { 
        this.checkFavoriteStore(); 
       }, 1500) 

вы используете много JavaScript здесь, вы можете использовать Vue делать большую часть работы там.

+0

проблема здесь в том, что он не использует привязки vue js и т. Д., Поэтому форсировать что-то для обновления и т. Д. Бессмысленно, так как его обновление ни к чему. –

1

Другим решение описано в vue-router doc. Просто используйте систему watch, применяемую к исходному атрибуту $route. Вы сможете обнаружить новый маршрут, даже если они будут использовать один и тот же компонент и получить данные в результате.