gpt4 book ai didi

sails.js - 如何在sailsjs 中导入和使用常规的vuejs 组件?

转载 作者:行者123 更新时间:2023-12-01 12:09:02 26 4
gpt4 key购买 nike

我需要使用 vue 组件包作为带有sails 的npm 模块。

尝试了一切:

  • 无法将其导入页面实例,此处不允许导入;
  • 无法将其导入 parasails.registerCompnent,同样的错误;
  • 要求也不工作;
  • 在主 app.js 中导入它不起作用。

  • 到处看了看,真是令人沮丧,到处都没有任何信息。

    这是我后悔为我的项目选择风 sails 的时刻之一。

    任何人都有一个关于如何在sails 实例页面中使用npm pacages vue 组件的工作示例?

    最佳答案

    据我所知,您不能将组件作为包导入。你需要做的就是把 .Vue 文件的内容放到一个 parasails.registerComponent 文件中。使用assets/js/components 文件夹中的现有组件之一作为指导。你可能需要做一些摆弄。

    我举个例子:https://vuejs.org/v2/examples/grid-component.html

    我在welcome.ejs中放置了以下内容

    <!-- 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}}
    <span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
    </span>
    </th>
    </tr>
    </thead>
    <tbody>
    <tr v-for="entry in filteredData">
    <td v-for="key in columns">
    {{entry[key]}}
    </td>
    </tr>
    </tbody>
    </table>
    </script>

    <!-- demo root element -->
    <demo-grid
    :data="gridData"
    :columns="gridColumns"
    :filter-key="searchQuery">
    </demo-grid>

    我删除了搜索栏并大写过滤器以简化此示例(并使其正常工作)。

    我添加到welcome.page.js 中的数据部分
        index: 0,
    entry: 0,
    key: 0,
    searchQuery: '',
    gridColumns: ['name', 'power'],
    gridData: [
    { name: 'Chuck Norris', power: Infinity },
    { name: 'Bruce Lee', power: 9000 },
    { name: 'Jackie Chan', power: 7000 },
    { name: 'Jet Li', power: 8000 },
    ],

    index、entry 和 key 是模板中使用的变量。它们必须在数据部分中定义,否则您会收到未定义的错误。

    然后我创建了 grid.component.js 文件
    parasails.registerComponent('demo-grid', {
    // ╔═╗╦═╗╔═╗╔═╗╔═╗
    // ╠═╝╠╦╝║ ║╠═╝╚═╗
    // ╩ ╩╚═╚═╝╩ ╚═╝
    props: [
    'data',
    'columns',
    'filterKey',
    ],

    // ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗
    // ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣
    // ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
    data: function (){
    var sortOrders = {}
    this.columns.forEach(function (key) {
    sortOrders[key] = 1
    })
    return {
    sortKey: '',
    sortOrders: sortOrders
    }
    },

    // ╦ ╦╔╦╗╔╦╗╦
    // ╠═╣ ║ ║║║║
    // ╩ ╩ ╩ ╩ ╩╩═╝
    template: '#grid-template',

    // ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
    // ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣
    // ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
    beforeMount: function() {

    },

    mounted: function(){
    },
    // ^Note that there is no `beforeDestroy()` lifecycle callback in this
    // component. This is on purpose, since the timing vs. `leave()` gets tricky.

    computed: {
    filteredData: function () {
    var sortKey = this.sortKey
    var filterKey = this.filterKey && this.filterKey.toLowerCase()
    var order = this.sortOrders[sortKey] || 1
    var data = this.data
    if (filterKey) {
    data = data.filter(function (row) {
    return Object.keys(row).some(function (key) {
    return String(row[key]).toLowerCase().indexOf(filterKey) > -1
    })
    })
    }
    if (sortKey) {
    data = data.slice().sort(function (a, b) {
    a = a[sortKey]
    b = b[sortKey]
    return (a === b ? 0 : a > b ? 1 : -1) * order
    })
    }
    return data
    }
    },

    // ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
    // ║║║║ ║ ║╣ ╠╦╝╠═╣║ ║ ║║ ║║║║╚═╗
    // ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝
    methods: {

    sortBy: function (key) {
    this.sortKey = key
    this.sortOrders[key] = this.sortOrders[key] * -1
    }
    }

    });

    注意 props 部分的格式与原始 .Vue 文件中的不同。我也删除了过滤器部分。

    我把css放在welcome.less文件中
    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;
    }

    我在其他几个组件方面取得了成功。有一些试验和错误,我不得不从一些组件中删除一些功能。如果您真的需要参与其中,您可以在项目中使用 parasails 源代码,深入挖掘并添加您需要的功能。然后提交更改。

    关于sails.js - 如何在sailsjs 中导入和使用常规的vuejs 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958487/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com