听风语

听风语 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

听风语 回答了问题 · 10月27日

解决hexo使用next主题,出现这个问题,主题不能显示。

解决方法:npm i hexo-renderer-swig
原因:hexo在5.0之后把swig给删除了需要自己手动安装
如果有什么问题可以加hexo的QQ群,我就是在qq群里问,有人帮忙解决的。

关注 1 回答 1

听风语 提出了问题 · 10月26日

解决hexo使用next主题,出现这个问题,主题不能显示。

使用hexo init安装后,通过hexo s启动服务可以看到是对的了
image

然后安装next
git clone https://github.com/iissnan/he... themes/next
theme: next
启动 hexo s
这是后localhost:4000显示的不是next官网上说的页面,这是怎么回事呀
image

package.json
image

关注 1 回答 1

听风语 发布了文章 · 10月15日

nutui datepicker功能补充

nutui中的datepicker组件使用了之后就必须选一个时间,有时候,我们希望的是选择空,代表选择所有的时间,这个组件似乎没提供这个功能(如果我错了,感谢指正),所以使用了nutui中的picker组件自己做了一个时间选择器

nutui时间组件
根据picker组件写的时间组件

组件调用方法 只写了点简略的内容,按钮点击唤醒选择弹窗没写

<com-date-picker
    :is-visible="datePicker.visible"
    title="请选择日期"
    @close="datePicker.visible = false"
    @confirm="dateConfirm">
</com-date-picker>

-----
data () {
    return {
        form: {
            date: '',
        },

        // 时间选择
        datePicker: {
            visible: false
        },
    }
},
methods: {
    search () {
        // 请求逻辑---
    },
    // 时间选择器
    dateConfirm (data) {
        this.form.date = data;
        this.search(); // 请求数据
    },
}

组件

<!-- 公共时间选择器 -->
<template>
    <nut-picker class="com-date-picker"
        :is-visible="isVisible"
        :list-data="list"
        :title="title"
        :default-value-data="defaultValue"
        @choose="change"
        @close="close"
        @confirm="confirm">    
    </nut-picker>
</template>
<script>
export default {
    name: 'comDatePicker',
    data () {
        return {
            timer: null,
            // 是否是默认值改变,默认值改变会默认调用confirm对应方法
            defaultTimer: null,

            list: [
                // [
                //     {label: 2020, value: '2020年'},
                //     {label: 2019, value: '2019年'},
                //     {label: 2018, value: '2018年'},
                // ],
                // [
                //     {label: 1, value: '1月'},
                //     {label: 2, value: '2月'},
                //     {label: 3, value: '3月'},
                //     {label: 4, value: '4月'},
                // ],
                // [
                //     {label: 1, value: '1日'},
                //     {label: 2, value: '2日'},
                //     {label: 3, value: '3日'},
                //     {label: 4, value: '4日'},
                // ]
            ],
            defaultValue: [], // 默认值
        }
    },
    props: {
        // 显隐
        isVisible: {
            default: false
        },
        // 标题
        title: {
            default: ''
        },
        // 1-year/2-month/3-day
        type: {
            default: 3
        },
        // 开始时间
        startDate: {
            default: '2000-01-01'
        },
        // 结束时间
        endDate: {
            default: new Date().toLocaleDateString()
        },
        // 默认值
        default: {
            default: ''
        },
        // 是否显示中文
        isShowChinese: {
            default: true
        },
        // 所有的文本
        allText: {
            default: '默认'
        },
    },
    watch: {
        default (val) {
            this.setValue(val); // 设置默认值
        }
    },
    created () {
        this.setDateList(0, this.default); // 设置时间列表
        this.setValue(this.default); // 设置默认值
    },
    mounted () {
    },
    methods: {
        // 设置默认值
        setValue (sdate) {
            var res = [];
            if (sdate) {
                sdate = typeof sdate == 'number' ? '' + sdate : sdate;
                var arr = sdate.split('-');
                var year = arr[0], month = '', day = '';
                if (arr[1]) {
                    month = arr[1];
                    if (arr[2] && arr[2] <= new Date(year, month, 0).getDate()) {
                        day = arr[2];
                    }
                }

                // 年
                if (this.type >= 1 && this.list.length > 0) {
                    for (var i = 0; i < this.list[0].length; i++) {
                        var item = this.list[0][i];
                        if (item.label == year) {
                            res[0] = item;
                            break;
                        }
                    }
                }
                // 月
                if (this.type >= 2 && this.list.length > 1) {
                    for (var i = 0; i < this.list[1].length; i++) {
                        var item = this.list[1][i];
                        if (item.label == month) {
                            res[1] = item;
                            break;
                        }
                    }
                }
                // 日
                if (this.type >= 3 && this.list.length > 2) {
                    for (var i = 0; i < this.list[2].length; i++) {
                        var item = this.list[2][i];
                        if (item.label == day) {
                            res[2] = item;
                            break;
                        }
                    }
                }
            }

            clearInterval(this.defaultTimer);
            this.defaultTimer = setTimeout(() => {
                this.defaultTimer = null;
            }, 200);
            this.defaultValue = res;
        },

        // 依次返回this、改变的列数,改变值,当前选中值
        change (target, index, value, choise) {
            clearTimeout(this.timer);
            this.timer = setTimeout(() => {
                var type = index+1;
                var date = this.getChoise(choise);
                this.setDateList(type, date);
                this.setValue(date);
            }, 50);
        },

        close () {
            this.$emit('close');
        },

        confirm (choise) {
            if (this.defaultTimer) {
                return;
            }
            var date = this.getChoise(choise);
            this.$emit('confirm', date);
        },

        // 设置时间列表
        // type 1年改变、2月改变、3日改变
        setDateList (type, date) {
            type = type || 0;
            var y = '', m = '', d = '';
            if (date) {
                var arr = date.split('-');
                y = arr[0];
                m = arr[1] ? arr[1] : '';
                d = arr[2] ? arr[2] : '';
            }

            var startDate = new Date(this.startDate),
                endDate = new Date(this.endDate);
            var startY = startDate.getFullYear(),
                startM = startDate.getMonth() + 1,
                startD = startDate.getDate(),
                startT = startDate.getTime(),
                endY = endDate.getFullYear(),
                endM = endDate.getMonth() + 1,
                endD = endDate.getDate(),
                endT = endDate.getTime();

            var aYear = [
                {label: '', value: this.allText}
            ];
            var aMonth = [
                {label: '', value: this.allText}
            ];
            var aDay = [
                {label: '', value:this.allText}
            ];
            
            if (startT <= endT) {
                // 年
                for (i = startY; i <= endY; i++) {
                    aYear.push({
                        label: i,
                        value: i + (this.isShowChinese ? '年' : '')
                    });
                }

                // 月
                if (y && type <= 1 && this.type >= 2) {
                    var minM = 1, maxM = 12;
                    if (startY == endY) {
                        minM = startM;
                    }
                    if (y == endY) {
                        maxM = endM;
                    }
                    for (var i = minM; i <= maxM; i++) {
                        aMonth.push({
                            label: i,
                            value: i + (this.isShowChinese ? '月' : '')
                        })
                    }
                }

                // 日
                if (m && type <= 2 && this.type >= 3) {
                    var minD = 1, maxD = 30;
                    if (startY == endY && startM == endM) {
                        minD = startD;
                    }
                    if (y == endY && m == endM) {
                        maxD = endD;
                    } else {
                        maxD = new Date(y, m, 0).getDate();
                    }
                    for (var i = minD; i <= maxD; i++) {
                        aDay.push({
                            label: i,
                            value: i + (this.isShowChinese ? '日' : '')
                        })
                    }
                }
            }

            if (type == 0) {
                this.list[0] = aYear;
            }
            if (type <= 1 && this.type >= 2) {
                this.list[1] = aMonth;
            }
            if (type <= 2 && this.type >= 3) {
                this.list[2] = aDay;
            }
        },

        // 当前选中时间
        getChoise (choise) {
            var date = '';
            for (var i = 0; i < choise.length; i++) {
                var item = choise[i];
                if (!item.label) {
                    break;
                }
                if (i != 0 && item.label) {
                    date += '-';
                }
                date += this.$G.makeUpNum(item.label);
            }
            return date;
        },
    }
}
</script>
查看原文

赞 0 收藏 0 评论 0

听风语 回答了问题 · 9月9日

一条ajax报错,请问谁遇到过呢?

跨域问题,浏览器设置一下允许跨域就OK

https://segmentfault.com/a/11...

关注 7 回答 5

听风语 回答了问题 · 9月9日

vue父组件向子组件传值怎么拆解成单个变量?

父组件

<template>
<div>
    <a-child :query="query"></a-child>
</div>
</template>
<script>
export default {
    data () {
        return {
            query: {
                a: 1,
                b: 2,
                c: 3
            }
        }
    }
}
</script>

子组件

<template>
    <div>
        <p>{{a}}</p>
        <p>{{b}}</p>
        <p>{{c}}</p>
    </div>
</template>
<script>
export default {
    data () {
        return {
            a: '',
            b: '',
            c: ''
        }
    },
    props: {
        query: {
            default () {
                return {}
            }
        }
    },
    watch: {
        query (val) {
            this.setQuery();
        }
    },
    created () {
        this.setQuery();
    },
    methods: {
        setQuery () {
            this.a = this.query.a || '';
            this.b = this.query.b || '';
            this.c = this.query.c || '';
        }
    }
}
</script>

关注 7 回答 7

听风语 回答了问题 · 2019-08-22

module.exports导出问题

因为我想要的是:既可以import tools from '...';引入整个对象。又可以import {getStyle} from '...';引入指定的方法。

现在我找到一个办法
tools.js

var tools = {
    a: function () {
        console.log('kjjsak')
    }
}
export const a = tools.a;
export default tools;

About.vue

<template>
  <div class="about"></div>
</template>
<script>
import {a} from '@/utils/tools';
import tools from '@/utils/tools';
export default {
    name: 'About',
    mounted () {
        console.log(a);
        console.log(tools);
    }
}
</script>

这样就可以两种方法都能引入了。

关注 3 回答 3

听风语 提出了问题 · 2019-08-22

module.exports导出问题

在使用module.exports的时候遇到一个问题

1.不报问题的代码
tools.js

var tools = {
    getStyle: function (obj, name) {
        // return obj.currentStyle[name];
        return 123;
    }
}
module.exports = tools;

Aboute.vue

<template>
  <div class="about"></div>
</template>
<script>
import {getStyle} from '@/utils/tools'
export default {
    name: 'About',
    mounted () {
        console.log(getStyle());
    }
}
</script>

结果:没问题
图片描述

2.报问题的代码
tools.js

var tools = {
    getStyle: function (obj, name) {
        return obj.currentStyle[name];
        // return 123;
    }
}
module.exports = tools;

About.vue同上,一点都不变
结果:报错了
图片描述
图片描述

这个moudle.exports应该怎么使用呀!!!

关注 3 回答 3

听风语 发布了文章 · 2019-06-15

前端options请求解决办法,Chrome跨域

这两天遇到一个问题,发送post请求时浏览器先发送了一个options请求,给我报错了。

headers添加了token之类的自定义属性,或者Content-Type不是text/plain, multipart/form-data, application/x-www-form-urlencoded 这三个之一的话就会发送options请求。

解决办法
在网上搜了好久都是叫后台处理,但是,我他妹的这个后台级别太低了,不想也不会处理这个问题。
最后找到解决办法是。

解决跨域的时候使用浏览器右键->属性->目标 最后添加‘ --args --disable-web-security --user-data-dir="C:/ChromeDevSession"’
注意:引号没有,最前面有个空格。

image

跨域之后如何携带cookie:
同源ajax请求是可以自动携带cookie的
而非同源需要客户端和服务端都做处理:
1.客户端需要对xhr对象设置withCredentials:true
2.服务端需要设置响应头 access-control-allow-credentials:true
              同时必须指明  access-control-allow-origin 为服务方的origin, 不能为*

如果还不行,chroome需要配置一下
chrome://flags/
image

查看原文

赞 0 收藏 0 评论 6

听风语 回答了问题 · 2019-06-08

解决使用Node.js在控制台中,展示文件目录

找到解决方法了,不用on绑定data,用once绑定就好了。

关注 2 回答 2

听风语 提出了问题 · 2019-06-06

解决使用Node.js在控制台中,展示文件目录

期待效果:想要用node做一个小Demo,显示 一级文件夹 下的文件列表,在选中 二级文件 的时候显示文件信息,在选中 二级文件夹 的时候,显示该文件夹下的文件列表。

问题:在选中三级文件的时候出问题了,stdin.on('data', xxx)多执行了。

目录结构:
图片描述

代码:


var fs = require('fs'),
    stdin = process.stdin,
    stdout = process.stdout,
    aFiles = [],
    noData = true;

readdir(__dirname);

function readdir (path) {
    fs.readdir(path, function (err, files) {
        if (err) {
            console.log('error:1');
            return console.error(err);
        }

        aFiles = JSON.parse(JSON.stringify(files));

        file(0, path, aFiles);
    })
}

// 显示文件列表
function file(i, path, aFiles) {
    var filename = aFiles[i];

    // 使用异步获取文件信息
    fs.stat(path + '/' + filename, function (err, stat) {
        if (err) {
            console.log('error:2');
            return console.error(err);
        }

        // 判断是否为文件夹
        if (stat.isDirectory()) {
            console.log('    ' + i + '    \033[36m' + filename + '/\033[39m');
        } else {
            console.log('    ' + i + '    \033[90m' + filename + '\033[39m');
        }

        i++;
        if (aFiles.length != i) {
            file(i, path, aFiles);
        } else {
            read(path, aFiles);
        }
    })
}

// i/0流
function read (path, aFiles) {
    console.log('');
    stdout.write('    \033[33mEnter your choice:\033[39m');
    stdin.resume();

    stdin.on('data', function (data) {
        var idx = parseInt(data.toString());
        var filename = aFiles[idx];

        if (!filename) {
            stdout.write('    \033[33mEnter your choice:\033[39m');
            
        } else {
            stdin.pause();
            readfile(filename, path);
        }
    })    
}

// 读取文件
function readfile (filename, path, aFiles) {
    var nextPath = path + '/' + filename;
    fs.stat(nextPath, function (err, stat) {
        if (err) {
            return console.error(err);
        }

        if (stat.isDirectory()) {
            readdir(nextPath);

        } else {
            fs.readFile(nextPath, function (err, data) {
                if (err) {
                    return console.error(err);
                }
                console.log('');    // 同console.log('\n');
                console.log('    \033[90m' + data.toString().replace(/(.*)/g, '    $1') + '\033[39m');
            })
        }
    })
}

    

错误图片:
图片描述

关注 2 回答 2

认证与成就

  • 获得 11 次点赞
  • 获得 14 枚徽章 获得 0 枚金徽章, 获得 2 枚银徽章, 获得 12 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-07-12
个人主页被 467 人浏览