如何将html、javascript和css文件组合成一个.Vue组件、网格组件和外部数据
我在Vue.js网站上看到了这个例子。这是一个创建可重用网格组件并将其用于外部数据的示例?我对单文件组件的工作原理有基本的了解。我知道html、javascript和css部分都是相应的。但是我不知道如何使这个带有外部数据的网格组件适合于框架。我没有找到任何关于这个的在线教程。请演示如何将这三个文件放入一个.vue文件中。多谢各位 HTML:如何将html、javascript和css文件组合成一个.Vue组件、网格组件和外部数据,javascript,html,css,vue.js,vue-component,Javascript,Html,Css,Vue.js,Vue Component,我在Vue.js网站上看到了这个例子。这是一个创建可重用网格组件并将其用于外部数据的示例?我对单文件组件的工作原理有基本的了解。我知道html、javascript和css部分都是相应的。但是我不知道如何使这个带有外部数据的网格组件适合于框架。我没有找到任何关于这个的在线教程。请演示如何将这三个文件放入一个.vue文件中。多谢各位 HTML: <!-- component template --> <script type="text/x-template" id="
<!-- component template -->
<script type="text/x-template" id="grid-template">
<table>
<thead>
<tr>
<th v-for="key in columns"
@click="sortBy(key)"
:class="{ active: sortKey == key }">
{{ key | capitalize }}
<span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredHeroes">
<td v-for="key in columns">
{{entry[key]}}
</td>
</tr>
</tbody>
</table>
</script>
<!-- demo root element -->
<div id="demo">
<form id="search">
Search <input name="query" v-model="searchQuery">
</form>
<demo-grid
:heroes="gridData"
:columns="gridColumns"
:filter-key="searchQuery">
</demo-grid>
</div>
CSS:
当前我的.vue文件:
<template>
<!-- component template -->
<script type="text/x-template" id="grid-template">
<table>
<thead>
<tr>
<th v-for="key in columns"
@click="sortBy(key)"
:class="{ active: sortKey == key }">
{{ key | capitalize }}
<span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredHeroes">
<td v-for="key in columns">
{{entry[key]}}
</td>
</tr>
</tbody>
</table>
</script>
<!-- demo root element -->
<div id="demo">
<form id="search">
Search <input name="query" v-model="searchQuery">
</form>
<demo-grid
:heroes="gridData"
:columns="gridColumns"
:filter-key="searchQuery">
</demo-grid>
</div>
</template>
<script>
export default {
data: function () {
var sortOrders = {}
this.columns.forEach(function (key) {
sortOrders[key] = 1
})
return {
sortKey: '',
sortOrders: sortOrders
}
},
computed: {
filteredHeroes: function () {
var sortKey = this.sortKey
var filterKey = this.filterKey && this.filterKey.toLowerCase()
var order = this.sortOrders[sortKey] || 1
var heroes = this.heroes
if (filterKey) {
heroes = heroes.filter(function (row) {
return Object.keys(row).some(function (key) {
return String(row[key]).toLowerCase().indexOf(filterKey) > -1
})
})
}
if (sortKey) {
heroes = heroes.slice().sort(function (a, b) {
a = a[sortKey]
b = b[sortKey]
return (a === b ? 0 : a > b ? 1 : -1) * order
})
}
return heroes
}
},
filters: {
capitalize: function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
}
},
methods: {
sortBy: function (key) {
this.sortKey = key
this.sortOrders[key] = this.sortOrders[key] * -1
}
}
}
</script>
<style scoped>
body {
font-family: Helvetica Neue, Arial, sans-serif;
font-size: 14px;
color: #444;
}
table {
border: 2px solid #42b983;
border-radius: 3px;
background-color: #fff;
}
th {
background-color: #42b983;
color: rgba(255,255,255,0.66);
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
td {
background-color: #f9f9f9;
}
th, td {
min-width: 120px;
padding: 10px 20px;
}
th.active {
color: #fff;
}
th.active .arrow {
opacity: 1;
}
.arrow {
display: inline-block;
vertical-align: middle;
width: 0;
height: 0;
margin-left: 5px;
opacity: 0.66;
}
.arrow.asc {
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-bottom: 4px solid #fff;
}
.arrow.dsc {
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #fff;
}
</style>
我不知道如何处理中的javascript文件,显然我不能复制并粘贴它。但是我不知道我应该做什么改变 假设您正确设置了构建管道,您的SFC看起来不正确。深入了解关于SFC,您必须将代码的每一部分都封装到自己的块中,这意味着 HTML模板 JavaSCript脚本 CSS样式 你的证监会就必须这样
<template>
<!-- HTML markup here -->
</template>
<script>
// JavaScript code here
</script>
<style>
/* CSS stylings here */
</style>
在您的示例中,您将模板和脚本块混合在一起,这不应该是这样的。很抱歉问一下,但是您确定您了解SFC的基本知识吗?如果是这样,你就会知道你已经有了结果。你只需要把它们放在正确的地方。但是,您甚至没有尝试根据堆栈溢出规则自己解决问题。@Aer0我尝试过,但我认为我没有将它们放在正确的位置,因为检查器中显示了许多错误。我只能让搜索栏以某种方式工作。你知道我该怎么处理html部分吗?我很困惑。我只知道证监会的一些非常简单的例子。对不起,你实际上没有遵守我们的规则。如果您已经正确阅读了指南,您应该能够轻松创建SFC。请看这里的第一张图片。上面清楚地写着“黑白相间”@Aer0谢谢你的提醒!我已在问题末尾添加了失败的vue文件。我以前读过这个网站,但可能因为我是新来的,所以没有完全理解。我不知道如何处理每个文件中的多个部分。请您通读我的错误代码并给我一些提示好吗?那么,HTML文件的一部分,作为组件模板,不应该在中,而应该在SFC中?
<template>
<!-- component template -->
<script type="text/x-template" id="grid-template">
<table>
<thead>
<tr>
<th v-for="key in columns"
@click="sortBy(key)"
:class="{ active: sortKey == key }">
{{ key | capitalize }}
<span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredHeroes">
<td v-for="key in columns">
{{entry[key]}}
</td>
</tr>
</tbody>
</table>
</script>
<!-- demo root element -->
<div id="demo">
<form id="search">
Search <input name="query" v-model="searchQuery">
</form>
<demo-grid
:heroes="gridData"
:columns="gridColumns"
:filter-key="searchQuery">
</demo-grid>
</div>
</template>
<script>
export default {
data: function () {
var sortOrders = {}
this.columns.forEach(function (key) {
sortOrders[key] = 1
})
return {
sortKey: '',
sortOrders: sortOrders
}
},
computed: {
filteredHeroes: function () {
var sortKey = this.sortKey
var filterKey = this.filterKey && this.filterKey.toLowerCase()
var order = this.sortOrders[sortKey] || 1
var heroes = this.heroes
if (filterKey) {
heroes = heroes.filter(function (row) {
return Object.keys(row).some(function (key) {
return String(row[key]).toLowerCase().indexOf(filterKey) > -1
})
})
}
if (sortKey) {
heroes = heroes.slice().sort(function (a, b) {
a = a[sortKey]
b = b[sortKey]
return (a === b ? 0 : a > b ? 1 : -1) * order
})
}
return heroes
}
},
filters: {
capitalize: function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
}
},
methods: {
sortBy: function (key) {
this.sortKey = key
this.sortOrders[key] = this.sortOrders[key] * -1
}
}
}
</script>
<style scoped>
body {
font-family: Helvetica Neue, Arial, sans-serif;
font-size: 14px;
color: #444;
}
table {
border: 2px solid #42b983;
border-radius: 3px;
background-color: #fff;
}
th {
background-color: #42b983;
color: rgba(255,255,255,0.66);
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
td {
background-color: #f9f9f9;
}
th, td {
min-width: 120px;
padding: 10px 20px;
}
th.active {
color: #fff;
}
th.active .arrow {
opacity: 1;
}
.arrow {
display: inline-block;
vertical-align: middle;
width: 0;
height: 0;
margin-left: 5px;
opacity: 0.66;
}
.arrow.asc {
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-bottom: 4px solid #fff;
}
.arrow.dsc {
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #fff;
}
</style>
<template>
<!-- HTML markup here -->
</template>
<script>
// JavaScript code here
</script>
<style>
/* CSS stylings here */
</style>