Vue.js 状態管理用の変数を実装してみた
6797 ワード
実現したかったこと
aタグなどの要素としては同じだが遷移先が異なるものについてcomponent化
生成した数に応じて、表示位置を制御するクラスを適用する
実装
index.html
<!-- // ... -->
<body>
<!-- // ... -->
<vue_header></vue_header>
<!-- // ... -->
</body>
<script type="text/javascript">
Vue.component('vue_a', {
props: [
'list',
'position_class',
],
template: `
<a
v-bind:class="position_class"
v-bind:href="list.href"
>
{{ list.name }}
</a>
`,
});
Vue.component('vue_header', {
beforeCreate: function () {
this.count = 0;
},
data: function () {
return {
lists: [
{
href: "/href1",
name: "リンク1",
},
{
href: "/href2",
name: "リンク2",
},
{
href: "/href3",
name: "リンク3",
},
],
};
},
methods: {
getPositionClass: function () {
if (this.count < 2) {
this.count++;
return "left";
} else {
this.count++;
return "right";
}
}
},
template: `
<header>
<div>
<vue_a
v-for="(list, index) in this.lists"
v-bind:key=index
v-bind:list=list
v-bind:position_class="getPositionClass()"
>
</vue_a>
</div>
</header>
`,
});
<!-- // ... -->
</script>
<!-- // ... -->
つまずいたところ
index.html
<!-- // ... -->
<body>
<!-- // ... -->
<vue_header></vue_header>
<!-- // ... -->
</body>
<script type="text/javascript">
Vue.component('vue_a', {
props: [
'list',
'position_class',
],
template: `
<a
v-bind:class="position_class"
v-bind:href="list.href"
>
{{ list.name }}
</a>
`,
});
Vue.component('vue_header', {
beforeCreate: function () {
this.count = 0;
},
data: function () {
return {
lists: [
{
href: "/href1",
name: "リンク1",
},
{
href: "/href2",
name: "リンク2",
},
{
href: "/href3",
name: "リンク3",
},
],
};
},
methods: {
getPositionClass: function () {
if (this.count < 2) {
this.count++;
return "left";
} else {
this.count++;
return "right";
}
}
},
template: `
<header>
<div>
<vue_a
v-for="(list, index) in this.lists"
v-bind:key=index
v-bind:list=list
v-bind:position_class="getPositionClass()"
>
</vue_a>
</div>
</header>
`,
});
<!-- // ... -->
</script>
<!-- // ... -->
vue_header
のdata内にcount
を保持していたが、
count
の更新と共にtemplateが再描画されてしまう
beforeCreate
内で変数初期化することで、
処理内で更新してもtemplate
は更新されない
さいごに
他にいい対応方法・至らぬ点ありましたら、コメントで指摘して頂けるとありがたいです...
Author And Source
この問題について(Vue.js 状態管理用の変数を実装してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/xy2e45/items/3f14e5d4f90314dc4086著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .