如何在 Vue 计算属性中重用带有参数的函数?

Con*_*ech 5 javascript vue.js vue-component vuejs2

我有一个带有五个计算属性函数的 Vue 实例,它们对不同的值执行相同的操作。我重复了很多次,并且想知道一种更干净的方法来做到这一点,而不需要重复太多。

在 HTML 模板中,我有 5 个输入字段,每个输入字段限制为 25 个字符,我想显示我显示一个字符计数器:

        <div class='field is-grouped'>
        <p class='control is-expanded'>
            <input 
                class="input" 
                placeholder="Trophy engraving line 1 (25 character limit)" 
                v-model='engraving.line1' 
                v-validate="'required'"
                :class="{'input': true, 'is-danger': errors.has('engraving.line1') }" 
                name='engraving.line1'>
        </p>
        <p class='control'>
            <span>{{ line1count }}</span>
        </p>
    </div>
Run Code Online (Sandbox Code Playgroud)

我有五个看起来完全一样的字段,除了它们说engraving.line2, engraving.line3,engraving.line4engraving.line5

然后我的组件 javascript 定义了雕刻对象,并对每个字段具有相同的计算方法。

export default {
    data(){
        return {
            engraving: {
                line1: '',
                line2: '',
                line3: '',
                line4: '',
                line5: '',
            }
        };
    },
    computed: {
        line1count() {
            var chars = this.engraving.line1.length,
                limit = 25;

            return (limit - chars) + "/" + limit + " characters remaining";
        },
        line2count(){
            var chars = this.engraving.line2.length,
                limit = 25;

            return (limit - chars) + "/" + limit + " characters remaining";
        },
        line3count(){
            var chars = this.engraving.line3.length,
                limit = 25;

            return (limit - chars) + "/" + limit + " characters remaining";
        },
        line4count(){
            var chars = this.engraving.line4.length,
                limit = 25;

            return (limit - chars) + "/" + limit + " characters remaining";
        },
        line5count(){
            var chars = this.engraving.line5.length,
                limit = 25;

            return (limit - chars) + "/" + limit + " characters remaining";
        }
    },
Run Code Online (Sandbox Code Playgroud)

我怎样才能重新使用这个函数来接受数据参数而不是重复太多呢?

Eri*_*c G 4

你可以使用一个方法:

methods: {
    linecount(line, limit) {
        var chars = this.engraving.line[line].length,
        return (limit - chars) + "/" + limit + " characters remaining";
    },
}
Run Code Online (Sandbox Code Playgroud)

然后在你的 html 中引用它:

<p class='control'>
     <span>{{ linecount(1,25) }}</span>
</p>
Run Code Online (Sandbox Code Playgroud)