javascript - vue2 react 过滤器值?

标签 javascript datetime momentjs vuejs2

当虚拟机数据更新时,我无法更新我计算的过滤器值。就我而言,我有一些时间日期时间存储在 UTC 的 VM 模型中。然后我有一个过滤器,它显示那些使用 moment 格式化为时区的时间。然后,如果用户需要,我想切换时区,但是当他们切换时区时,过滤器值不会相应更新。我是否遗漏了让他们 react 的东西?此外,它甚至没有使用我的默认值 selectedTz: 'America\Los_Angeles'(你会注意到它开始时始终显示为 TZ +0 (UTC),尽管有此默认设置)。

var app = new Vue({
        el: '#app',
        data: {
            games: [{start_time: '2017-01-23 21:00:00'}, {start_time: '2017-01-23 22:00:00'}, {start_time: '2017-01-23 23:00:00'}],
            selectedTz: 'America/Los_Angeles'
        },
        methods: {
            switchToEast: function () {
                this.selectedTz = 'America/New_York'
            },
            switchToWest: function () {
                this.selectedTz = 'America/Los_Angeles'
            }
        },
        filters: {
            usertz: function (date) {
                var tz = this.selectedTz
                var x = new moment.tz(date, 'Etc/UTC')
                x.tz(tz)
                return x.format('MMM Do @ h:mm a Z')
            }
        }
    })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone-with-data.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.min.js"></script>
<div id="app">
    <p class="text-right">All times are in {{ selectedTz }}</p>
    <div class="text-right">
        <button class="button" @click="switchToEast()">East</button>
        <button class="button" @click="switchToWest()">West</button>
    </div>
    <p v-for="game in games">
        {{ game.start_time | usertz }}
    </p>
</div>

最佳答案

我在使用过滤器时也遇到过这样的问题。无法用过滤器解决它,决定用计算属性来解决。在我看来,过滤器不能处理太多的计算。文档本身说

filters are primarily designed for text transformation purposes

像我这样尝试它,它应该可以工作。

var app = new Vue({
        el: '#app',
        data: {
            games: [{start_time: '2017-01-23 21:00:00'}, {start_time: '2017-01-23 22:00:00'}, {start_time: '2017-01-23 23:00:00'}],
            selectedTz: 'America/Los_Angeles'
        },
        methods: {
            switchToEast: function () {
                Vue.set(this, 'selectedTz', 'America/New_York')
            },
            switchToWest: function () {
                Vue.set(this, 'selectedTz', 'America/Los_Angeles')
            }
        },
        computed: {
            filteredGames: function () {
                var filteredList = []
                for (i = 0; i < this.games.length; i++) { 
                    var x = new moment.tz(this.games[i].start_time, 'Etc/UTC')
                    x.tz(this.selectedTz)
                    filteredList.push({start_time: x.format('MMM Do @ h:mm a Z')})
                }
                return filteredList
            }
        }
    })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone-with-data.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.10/vue.min.js"></script>
<div id="app">
    <p class="text-right">All times are in {{ selectedTz }}</p>
    <div class="text-right">
        <button class="button" @click="switchToEast()">East</button>
        <button class="button" @click="switchToWest()">West</button>
    </div>
    <p v-for="game in filteredGames">
        {{ game.start_time }}
    </p>
</div>

关于javascript - vue2 react 过滤器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353641/

相关文章:

javascript - onClick 函数适用于运行时但不适用于实际点击

python - 当 x 值为日期时间时,如何使用 polyfit 获得最佳拟合曲线?

python - 将 Julian 日期转换为数据框中的正常日期?

c# - 如何仅更改 DateTime 的日期部分,同时保留时间部分?

javascript - 用momentjs计算天数出错

javascript - 将 Moment 对象与时间字符串组合以获得新的 moment 对象

javascript - 如何制作 angularjs 表指令

javascript - 访问刚刚 append 到 DOM 的 jquery 元素

javascript - 从对象创建逗号分隔的字符串

momentjs - 如何在时刻时区获取默认时区时间