猿问

js中方法参数传值的问题

此问题出现在我阅读别人的源码时,对于此处传值有些不解,不知道是不是vue的一个特性,问题如下:

在全局注册了一个方法


export function parseTime(time, cFormat) {

  console.log(time)

  if (arguments.length === 0) {

    return null

  }


  if ((time + '').length === 10) {

    time = +time * 1000

  }


  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'

  let date

  if (typeof time === 'object') {

    date = time

  } else {

    date = new Date(parseInt(time))

  }

  const formatObj = {

    y: date.getFullYear(),

    m: date.getMonth() + 1,

    d: date.getDate(),

    h: date.getHours(),

    i: date.getMinutes(),

    s: date.getSeconds(),

    a: date.getDay()

  }

  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {

    let value = formatObj[key]

    if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]

    if (result.length > 0 && value < 10) {

      value = '0' + value

    }

    return value || 0

  })

  return time_str

}

这时候在组件内进行这样的调用,直接传递了我认为是该方法的第二个参数--时间格式,那么time参数是怎么传递的呢?调用如下:


  <el-table-column width="180px" align="center" label="Date">

    <template slot-scope="scope">

      <span>{{scope.row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}')}}</span>

    </template>

  </el-table-column>

主要是不明白为什么没有传递parseTime()方法的time参数直接传递了cFormat参数,是什么原理呢?


慕仙森
浏览 538回答 1
1回答

慕容3067478

{{scope.row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}')}}这里使用了vue的过滤器, parseTime的第一个参数为scope.row.timestamp。例如{{ message | filterA('arg1', arg2) }}这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 取值后的值作为第三个参数。传送门->过滤器
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答