vue过滤器不能给未定义属性length (实际功能正常,就是会不影响使用报错)

<h1>{{item.title | cutTitle(70)}}</h1>

title用了一个过滤器

filters: {
    cutTitle: function (str, len) {
      //length属性读出来的汉字长度为1 
      if (str.length * 2 <= len) {
        return str;
      }
      var strlen = 0;
      var s = "";
      for (var i = 0; i < str.length; i++) {
        s = s + str.charAt(i);
        if (str.charCodeAt(i) > 128) {
          strlen = strlen + 2;
          if (strlen >= len) {
            return s.substring(0, s.length - 1) + "...";
          }
        } else {
          strlen = strlen + 1;
          if (strlen >= len) {
            return s.substring(0, s.length - 2) + "...";
          }
        }
      }
      return s;
    },
  },

功能没错,效果也出来了,但是为啥会提示一个 不能给未定义属性length呀
图片描述

阅读 3.1k
3 个回答

估计是api获取数据前item.title是未定义的, 甚至item都是未定义的, 加上判断

<h1 v-if="item&&item.title">{{item.title | cutTitle(70)}}</h1>

初始化数据,item应该是遍历的list吧

return {
    list:[{title:''}]
}

或者等数据下来再渲染

<h1 v-if="item.title">{{item.title | cutTitle(70)}}</h1>

请求是异步的,需要在data里初始化数据, 或者数据出来再渲染<h1>{{item&&item.title | cutTitle(70)}}</h1>,或者加个v-if判断数据出来再渲染<h1 v-if="item.title">{{item.title | cutTitle(70)}}</h1>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题