2017-06-25 9 views
1

私はVueを初めて使っています。私は自分自身を改善しようとしています。Vue2:いつでも値を上書きするので、小道具を直接変更することは避けてください。

v-forで小道具を使用するとエラーが発生します。たとえば、次のように

は、テンプレート:

<template> 
    <div class="row"> 
     <div v-for="question in questions" class="col-md-12"><br /> 
     <router-link :to="'/question/' + question.question_id"> 
       <a :href="'/question/' + question.question_id" class="btn btn-primary btn-md pull-left">{{question.title}}</a> 
     </router-link> 
     </div> 
    </div> 
</template> 

スクリプト:私は反復のためデータを使用する場合(ページコンポーネントが同じである)

props: [ 
     'questions', 
    ], 
    data() { 
     return { 
      questionList: {} 
     } 
    }, 
    created() { 
     this.fetchQuestions(); 
    }, 
    computed: { 
     pageNumber() { 
      return (!isNaN(this.$route.params.id)) ? this.$route.params.id : 1; 
     }, 
     hasPrevious() { 
      return (this.$route.params.id > 0) ? true : false; 
     }, 
    }, 
    methods: { 
     fetchQuestions() { 
      fetch(`http://api.stackexchange.com/2.2/questions?key=MY_KEY&page= 
${parseInt(this.pageNumber)} 
&pagesize=10&order=desc&sort=activity&tagged=vue.js&site=stackoverflow`, { 
       method: 'GET', 
       }).then((resp) => { 
       return resp.json(); 
       }).then((obj) => { 
       this.questions = obj.items; 
       }); 
     }, 
    } 

、反復は動作しません。 。私は反復のために小道具を使用します。なぜなら、プロパティはページコンポーネントからの価値を得ているからです。

data() { 
    return { 
     questionList: this.questions, 
    } 
}, 
//... blah blah 
methods: { 
    fetchQuestions() { 
     // blahblah 
     .then((obj) => { 
      this.questionList = obj.items; 
      }); 
    }, 
} 

をしかし、私は(はい、私のプロジェクトは、ページネーションを持っている)のページを変更したときに、questionListは更新されませんでした:

私はこのようにそれを使用する場合は、エラー初めてなしで動作します。

私はこのようにそれを使用する場合:

data() { 
    return { 
     questionList: {}, 
    } 
}, 
//... blah blah 
methods: { 
    fetchQuestions() { 
     // blahblah 
     .then((obj) => { 
      this.questions = obj.items; 
      }); 
    }, 
} 

それも、ページが変更された場合、エラーを投げました。

私が言ったように私はVueで新しいです。この問題を解決するために私は何ができますか?

+1

https://vuejs.org/v2/guide/components.html#Composing-Components –

+0

@RoyJ動的な小道具にモデルを使用する必要がありますか?ありがとう。 – Ali

+0

新しい質問が親に存在するようにするには、イベントを発行して、* parent *に新しい質問リストを読み込んで応答させる必要があります。子供に新しく質問を表示させたい場合は、Bertの解決方法に従ってください。 –

答えて

1

props: [ 
    'questions', 
], 

を変更してみてください、questionListを反復するためにあなたのテンプレートを変更します。

<div v-for="question in questionList" class="col-md-12"> 

次に、スクリプトを2番目のオプションに変更します。

data() { 
    return { 
     questionList: this.questions, 
    } 
}, 
//... blah blah 
methods: { 
    fetchQuestions() { 
     // blahblah 
     .then((obj) => { 
      this.questionList = obj.items; 
      }); 
    }, 
} 

は、あなたのコンポーネントがquestionList、ローカルコピーを反復します。プロパティquestionsquestionListを初期化します。その後、fetchQuestionsメソッドをquestionListに更新する必要があります。

+0

おかげさまで@バートンエバンス私はあなたに感謝した私の生産を見ることができます:) http://author-eileen-70733.bitballoon.com/ – Ali

0

まずこの

props: [ 
    questions: [], 
], 
+0

すみません。私は試した。働いていない。また、私はあなたのコードをしようとすると、私はエラーが発生します。ご協力いただきありがとうございます。 – Ali

+0

@Aliエラーメッセージは何ですか? – joshuamabina

+0

タイトルにエラーメッセージがあります。 – Ali

関連する問題