Javascript - 无法修改/更改函数内的var对象值?

时间:2017-10-12 20:35:45

标签: javascript ecmascript-6 vue.js

Javascript - 无法修改/更改函数内的var对象值吗?

build.gradle

storeFile file("*.jks")
        storePassword "***"
        keyAlias "***"
        keyPassword "***"

这样的东西,它不起作用。

但是代码是正确的,因为像这样的东西

var shared = {
        lock: true,
        connection: '',
        messages: []
    };

Socket.onopen = function(e)
    {
        shared.connection = 'Zostałeś połączony pomyślnie!';
        shared.lock = false;
    };

确实有效。

所以就像我无法修改此函数中的shared.connection ...

但奇怪的是什么

Socket.onerror = function(e) {     shared.messages.push(generateMessage('System','Wystąpiłbłąd!Połączeniezostałoprzerwane。','others'));     shared.lock = true; };

这个有效,将消息正确地推送到shared.connection = 'Zostałeś połączony pomyślnie!'; Socket.onopen = function(e) { shared.lock = false; }; 中的messages数组。

怎么了?发生了什么事?

如何让它发挥作用?

完整代码:

shared

这个问题不同,因为我们在这里面对VueJS,它具有反应性,未来可以改变var值。

<script>

    var shared = {
        lock: true,
        connection: '',
        messages: []
    };

    function generateMessage(nick = '', content = '', color = '')
    {
        return {
            time: timeNow(),
            nick: nick,
            content: content,
            color: color
        };
    }

    function timeNow()
    {
        var date = new Date();
        return date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
    }

    export default {
        data() {
            return {
                lock: shared.lock,
                connection: shared.connection,
                login: true,
                message: {
                    time: '',
                    nick: '',
                    content: '',
                    color: 'others'
                },
                messages: shared.messages
            }
        },
        methods:
        {
            submit: function()
            {
                var date = new Date();
                this.message.time = date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
                Socket.send(JSON.stringify(this.message));
                this.message.color = '';
                this.messages.push(JSON.parse(JSON.stringify(this.message)));
                this.login = false;
                this.message.color = 'others';
                this.message.content = '';
            }
        }
    }

    var Socket = new WebSocket('ws://localhost:9000/chat');

    Socket.onopen = function(e)
    {
        shared.connection = 'Zostałeś połączony pomyślnie!';
        console.log(shared.connection);
        shared.lock = false;
    };

    Socket.onmessage = function(e)
    {
        shared.messages.push(JSON.parse(e.data));
    };

    Socket.onerror = function(e)
    {
        shared.messages.push(generateMessage('System', 'Wystąpił błąd! Połączenie zostało przerwane.', 'others'));
        shared.lock = true;
    };

    Socket.onclose = function(e)
    {
        shared.messages.push(generateMessage('System', 'Połączenie zostało zamknięte.', 'others'));
        shared.lock = true;
    };


</script>

Socket.onopen = function(e) { shared.connection = 'Zostałeś połączony pomyślnie!'; shared.messages.push(generateMessage('System', 'Wystąpił błąd! Połączenie zostało przerwane.', 'others')); 这个很好用,Vue中的消息更新,我可以看到它,

shared.messages.push(generateMessage('System', 'Wystąpił błąd! Połączenie zostało przerwane.', 'others'));不起作用,vue没有任何更新......发生了什么? :/

它更新了值,但是Vue没有得到它。

我认为这与vue有关..

enter image description here

enter image description here

0 个答案:

没有答案