Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用TurboLink时如何在jquery调用后更新vuejs组件数据_Javascript_Jquery_Ajax_Turbolinks_Vuejs2 - Fatal编程技术网

Javascript 使用TurboLink时如何在jquery调用后更新vuejs组件数据

Javascript 使用TurboLink时如何在jquery调用后更新vuejs组件数据,javascript,jquery,ajax,turbolinks,vuejs2,Javascript,Jquery,Ajax,Turbolinks,Vuejs2,我有一个vuejs组件,安装后应该显示从服务器获取的数据,并使用响应更新数据。当我使用turbolinks时,vue js不会更新dom 我尝试了许多不同的方法,但没有一种有效 Vue.component('pf-main-menu', { props: [''], template: '<pf-menu v-bind:links="links"></pf-menu>', data: function () { return { links: [{te

我有一个vuejs组件,安装后应该显示从服务器获取的数据,并使用响应更新数据。当我使用turbolinks时,vue js不会更新dom

我尝试了许多不同的方法,但没有一种有效

Vue.component('pf-main-menu', {
  props: [''],
  template: '<pf-menu v-bind:links="links"></pf-menu>',
  data: function () {
    return { links: [{text: 'teste'}] }
  },
  mounted: function() {
    this.links = [{text: 'teste 2'}]; <-- This change works

    $.ajax({
      url: '/api/v1/menus/main_menu.json',
    }).success(function(res) {
      this.links = [{text: 'teste 3'}]; <-- This change does not work
    }.bind(this));
  }
});
Vue.component('pf-main-menu'{
道具:[''],
模板:“”,
数据:函数(){
返回{links:[{text:'teste'}]}
},
挂载:函数(){

this.links=[{text:'teste2'}];之所以发生这种情况,是因为您的this没有指向正确的作用域,它的作用域在$.ajax调用中发生了更改,所以您只需执行以下操作:

  mounted: function() {
    this.links = [{text: 'teste 2'}]; <-- This change works
    var self = this
    $.ajax({
      url: '/api/v1/menus/main_menu.json',
    }).success(function(res) {
      self.links = [{text: 'teste 3'}]; <-- This change does not work
    }.bind(this));
  }
});
mounted:function(){

this.links=[{text:'teste2'}];之所以发生这种情况,是因为您的this没有指向正确的作用域,它的作用域在$.ajax调用中发生了更改,所以您只需执行以下操作:

  mounted: function() {
    this.links = [{text: 'teste 2'}]; <-- This change works
    var self = this
    $.ajax({
      url: '/api/v1/menus/main_menu.json',
    }).success(function(res) {
      self.links = [{text: 'teste 3'}]; <-- This change does not work
    }.bind(this));
  }
});
mounted:function(){

this.links=[{text:'teste2'}];根据Vue文档,您必须使用Vue.set来确保反应行为

    data: function () {
      return { 
        menu: {
          links: [ {text: 'teste'}] }
        }
     }, ....
在ajax success return中:

    Vue.set(this.menu, links, [{text: 'teste 3'}] ); 

更多信息

根据Vue文档,您必须使用Vue.set以确保反应性行为

    data: function () {
      return { 
        menu: {
          links: [ {text: 'teste'}] }
        }
     }, ....
在ajax success return中:

    Vue.set(this.menu, links, [{text: 'teste 3'}] ); 

更多信息

我更新了问题,我在之前尝试过你的方法=(.Thx用于answerI discovery,现在问题与turbolinks有关。我更新了问题,我在之前尝试过你的方法=(.Thx用于answerI discovery,现在问题与turbolinks有关