相关疑难解决方法(0)

如何在回调中访问正确的`this`?

我有一个构造函数,它注册一个事件处理程序:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', function () {
        alert(this.data);
    });
}

// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};

// called as
var obj = new MyConstructor('foo', transport);
Run Code Online (Sandbox Code Playgroud)

但是,我无法data在回调中访问已创建对象的属性.它看起来this并不是指创建的对象,而是指另一个对象.

我还尝试使用对象方法而不是匿名函数:

function MyConstructor(data, transport) {
    this.data = data;
    transport.on('data', this.alert);
}

MyConstructor.prototype.alert = function() {
    alert(this.name);
};
Run Code Online (Sandbox Code Playgroud)

但它表现出同样的问题.

如何访问正确的对象?

javascript callback this

1309
推荐指数
12
解决办法
36万
查看次数

Vuejs无法从组件访问引用

我正在尝试获取组件模板内的canvas元素,为vuejs1找到了很棒的文档但不是vuejs2,其中"ref"是获取元素的唯一方法.我正在获取对象,但是当我尝试访问变量时,它是未定义的.

我的HTML

<div id="app>
  <template id="image-capture">
    <div class="row" >
      <canvas ref="icanvas" ></canvas>
    </div>
  </template>
</div>
Run Code Online (Sandbox Code Playgroud)

我的js

const ic = {
  template: '#image-capture' ,

  created () {
    console.log(this.$refs); //this returns object
    console.log(this.$refs.icanvas); // but this is undefined
  }


}

const routes = [
  { path: '/ic', component:   ic},
]

const router = new VueRouter({
  routes 
})

 new Vue({
  router,
   }).$mount('#app')
Run Code Online (Sandbox Code Playgroud)

我需要获得icanvas元素.

这是控制台日志

vue.js vue-component vuejs2

26
推荐指数
4
解决办法
4万
查看次数

Vue.js - 无法读取未定义的属性“推送”

我有以下内容,但出现错误Cannot read property 'push' of undefined:

 var vm = new Vue({
        el: '#root',
        data: {
            posts: [],
            newPost: {}
        },
        createPost: function() {
               axios.post("api/posts/create", this.newPost).then(function (response) {
                    this.posts.push(response.data);
                })
        }
 });
Run Code Online (Sandbox Code Playgroud)

在 Chrome 开发工具的网络选项卡中,我可以看到 response.data 显然是一个对象:

{
  "id": 131,
  "postContent": "<p>test</p>\n",
}
Run Code Online (Sandbox Code Playgroud)

那么为什么我会收到此错误?

javascript arrays json vue.js vuejs2

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

javascript ×2

vue.js ×2

vuejs2 ×2

arrays ×1

callback ×1

json ×1

this ×1

vue-component ×1