vue.js渲染时间磋该怎么处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js渲染时间磋该怎么处理相关的知识,希望对你有一定的参考价值。

参考技术A vue.js渲染时间磋该怎么处理
使用Jquery结合AngulraJs使用的时候,在render完table后,执行一段js脚本,把JqTable应用到该table上,能够捕获到AngularJs渲染完成页面的事件。
要达到这个目的,需要为当前的app自定义directive:
app.directive('onFinishRenderFilters', function ($timeout)
return
restrict: 'A',
link: function(scope, element, attr)
if (scope.$last === true)
$timeout(function()
scope.$emit('ngRepeatFinished');
);


;
);
然后,在需要监控的地方,加上该directive:
<tr ng-repeat="user in users" on-finish-render-filters>
<td>user.Id</td>
<td>user.Name</td>
<td>user.Salary</td>
</tr>
最后,补充上需要render完成之后的Js脚本:
$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent)
//下面是在table render完成后执行的js
var table = $("#leaderBoard").dataTable(
bJQueryUI: true,
"sScrollX": '100%',
);
);本回答被提问者采纳
参考技术B

代码如下即可:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <div id="app">
          当前时间:nowDate | dataFmt('yyyy-MM-dd HH:mm:ss')
    </div>
    <script src="./bower_components/vue/dist/vue.min.js"></script>
    <script>
        // vue2.0后,删除了所有内置的过滤器,都需要自己定义
        Vue.filter('dataFmt',function(data,type)
          that = new Date(data)
          var o = 
              "M+": that.getMonth() + 1, //月份
              "d+": that.getDate(), //日
              "h+": that.getHours() % 12 == 0 ? 12 : that.getHours() % 12, //小时
              "H+": that.getHours(), //小时
              "m+": that.getMinutes(), //分
              "s+": that.getSeconds(), //秒
              "q+": Math.floor((that.getMonth() + 3) / 3), //季度
              "S": that.getMilliseconds() //毫秒
          ;
          var week =  "0": "\\u65e5", "1": "\\u4e00", "2": "\\u4e8c", "3": "\\u4e09", "4": "\\u56db", "5": "\\u4e94", "6": "\\u516d" ;
          if (/(y+)/.test(type))  type = type.replace(RegExp.$1, (that.getFullYear() + "").substr(4 - RegExp.$1.length)); 
          if (/(E+)/.test(type))  type = type.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\\u661f\\u671f" : "\\u5468") : "") + '周' + week[that.getDay() + ""]); 
          for (var k in o) 
              if (new RegExp("(" + k + ")").test(type))  type = type.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 
          
          return type;
        )



        //一个vue的实例
        new Vue(
            el: '#app',
            data: 
              nowDate:new Date()
            ,

            //动态显示时间,要不然时间是死的,刷新页面才会更新
            mounted: function () 
                var that=this;
                setInterval(function () 
                    that.nowDate=new Date();
                ,1000)
            
        )
    </script>
  </body>
</html>



效果如图所示:
(git图跳动有点快,真实是1s改一次)





其他:
vue渲染时间,如果是时间戳,需要格式化,格式化有很多办法,最简单的是过滤器,除了自己(如上)写过滤器外。vue有一个很出名的过滤器插件moment.js。你也可以尝试一下。
比自己写省事

VUE.JS 渲染函数

【中文标题】VUE.JS 渲染函数【英文标题】:VUE.JS render function 【发布时间】:2019-01-16 19:06:37 【问题描述】:

我正在学习 Vue.js,但在使用波纹管渲染功能时卡住了:

这是我从组件中调用的 javascript 文件。

import Button from './Button'

export default 
  functional: true,
    render(h) 
    return(
        <div id='toolbar'>
        <Button type='markup' tag='strong'> B </Button>
        <Button type='markup' tag='em'> I </Button>
        <Button type='section' tag='h1'> H1 </Button>
        <Button type='section' tag='h2'> H2 </Button>
        <Button type='section' tag='ul'> UL </Button>
        <Button type='section' tag='ol'> OL </Button>
        <slot />
      </div>
    )
  

我需要导出上述函数,但出现错误。

      5 |     render(h) 
      6 |     return(
   >  7 |         <div id='mobiledoc-toolbar'>
        |         ^
      8 |         <Button type='markup' tag='strong'> B </Button>

调用此函数时出现错误,不确定这是否仅适用于使用 backqouts/backticks

【问题讨论】:

首先我不太明白这个问题。但是要指出正确的方向,请使用 ES6 模板字符串来返回标记。看看这个:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… @bern 看来您应该提供一个您使用的Markup 库。 @henk.io & GONG - 我创建了一个叫做editor的组件,这个组件导入带有上面渲染功能的javascript文件,JS文件导入按钮标记的东西都应该在组件编辑器中渲染。 【参考方案1】:

在 redux 中,您确实可以将 HTML 标记与 JavaScript 混合使用。但是在 Vue.js 中没有这样的东西。唯一的方法是将您的 HTML 包装在模板字符串中:

return(`
    <div id='mobiledoc-toolbar'>
    ...
    </div>
`

或者为 vue 使用 &lt;template&gt; 模板格式(如果您使用的是 webpack)。此类组件如下所示:

<template>
  <div id="toolbar">
  </div>
</template>

<script>
    export default new Vue(

    );
</script>

<style lang="scss">
  // Your styles here
</style>

然后就不需要render() 方法了。

PS:是的,正如@Bert 建议的那样,你也可以使用 Babel JSX Transform plugin 并使用 JSX 语法。

【讨论】:

所以我的问题是基于我对 vue 的工作原理缺乏了解,因为我认为也许我可以在 vue 中将 HTML 标记与 JavaScript 混合使用。贴出来的信息帮助我了解vueJS的基础知识,感谢提示

以上是关于vue.js渲染时间磋该怎么处理的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js页面渲染出现{{message}}问题处理方法

Vue.js页面渲染出现{{message}}问题处理方法

在 vue.js 组件中渲染子组件

Vue.JS入门篇--列表渲染

在 vue.js 中渲染子组件之前等到父组件安装/准备好

记录-Vue.js模板编译过程揭秘:从模板字符串到渲染函数