代码之家  ›  专栏  ›  技术社区  ›  UbuntuCore

VueJS-在回调中为this.property赋值

  •  0
  • UbuntuCore  · 技术社区  · 6 年前

    我怎么能强迫

    this.json=reader.result;

    因为值在那里,但它没有被分配。

    <div id="app" >
        <label class="text-reader"><input type="file" v-on:change="getFile($event)"></label>
        {{ json }} // it's being set to "test" from getFile function.
    </div>
    

    这是VueJS代码


    new Vue
    ({
        el: '#app',
        data: {
            json: {}
        },
        methods:
        {
            getFile: function(ev) 
            {
                this.json = "test";
    
                var file = ev.target.files[0];
                var reader = new FileReader();
                reader.onload = function(e) 
                {
                    this.json = reader.result;
                    console.log(this.json);  // displays content properly
                }
    
                reader.readAsText(file);     
            }
        }
    });
    

    getFile: function(ev) 
    {
        var file = ev.target.files[0];
        var reader = new FileReader();
        reader.onload = function(e) 
        {
            this.callBackHandler(reader.result);
        }
    
        reader.readAsText(file);
    },
    callBackHandler: function(val)
    {
        console.log(val);
        this.json = val;
    }
    

    它大叫:


    同时使用callBackHandler作为参数。

    <label class="text-reader"><input type="file" v-on:change="getFile($event, callBackHandler())"></label>
    
    getFile: function(ev, handler) 
    {
        var file = ev.target.files[0];
        var reader = new FileReader();
        reader.onload = function(handler) 
        {
            handler(reader.result);
        }
    
        reader.readAsText(file);
    },
    callBackHandler: function(val)
    {
        console.log(val);
        this.json = val;
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   El Danielo    6 年前

    getFile函数应该如下所示:

    getFile: function(ev, handler) {
            var file = ev.target.files[0];
            var reader = new FileReader();
            reader.onload = (e => {
                this.callBackHandler(reader.result);
            }) 
    }
    

    getFile: function(ev, handler) {
            var file = ev.target.files[0];
            var reader = new FileReader();
            var self = this;
            reader.onload = function(e){
                self.callBackHandler(reader.result);
            } 
    }
    

    getFile: function(ev, handler) {
            var file = ev.target.files[0];
            var reader = new FileReader();
            reader.onload = function(e){
                this.callBackHandler(reader.result);
            }.bind(this) 
    }
    
        2
  •  0
  •   UbuntuCore    6 年前

    v-on:change="getFile($event)"
    
    (...)
    
    reader.onload = (x => 
    {
        this.callBackHandler(reader.result);
    });