需要保存至服务器的:常见编辑、发布文章页面基础技巧

发布于:2025-07-20 ⋅ 阅读:(13) ⋅ 点赞:(0)

渲染下拉表单

css与html样式就是最普通的那一种,我们来了解如何从服务器获取信息渲染表单,要注意的点为如何遍历。

演示:
在这里插入图片描述

<select name="channel_id" id="channels" class="channels">
            <option value="" selected>请选择文章频道</option>
            <option id="" value="1" class=""></option>
            <option id="" value="2" class=""></option>
            <option id="" value="3" class=""></option>
            <option id="" value="4" class=""></option>
            <option id="" value="5" class=""></option>
            <option id="" value="6" class=""></option>
            <option id="" value="7" class=""></option>
            <option id="" value="8" class=""></option>
            <option id="" value="9" class=""></option>
            <option id="" value="10" class=""></option>
            <option id="" value="11" class=""></option>
            <option id="" value="12" class=""></option>
            <option id="" value="13" class=""></option>
            <option id="" value="14" class=""></option>
            <option id="" value="15" class=""></option>
            <option id="" value="16" class=""></option>
            <option id="" value="17" class=""></option>
            <option id="" value="18" class=""></option>
            <option id="" value="19" class=""></option>
            <option id="" value="20" class=""></option>
            <option id="" value="21" class=""></option>
            <option id="" value="22" class=""></option>
            <option id="" value="23" class=""></option>
            <option id="" value="24" class=""></option>
            <option id="" value="25" class=""></option>
        </select>

result为服务器返回结果,我们可以通过控制台打印知道我们需要的内容在哪里,这里我们需要的channels数组存储在result.data.data中。

function setchannellist() {
            axios({
                url: '/v1_0/channels'
            }).then(result => {
            	//检查返回值
                console.log(result);
                console.log(result.data);
                console.log(result.data.data.channels);

                const channels = result.data.data.channels
                const options = document.querySelectorAll('.channels option')
                //item为数组中的每一个对象
                channels.forEach((item, index) => {
                	//跳过第一个选项
                    options[index + 1].id = item.id
                    options[index + 1].innerHTML = item.name
                })
            })
        }
        setchannellist()

可以说十分有十一分的简单。

图片框选择效果

演示:
在这里插入图片描述
方法:

上传图片需要用到input:file,但在这种情况下,我们当然不能直接更改input的样式达到这种效果。我们需要将input隐藏,再使用label标签为input代理,给label标签设置样式,就OK啦!

代码:

<style>
label {
    display: inline-block;
    height: 200px;
    width: 200px;
    text-align: center;
    line-height: 200px;
    border: 1px #aeaeae solid;
    vertical-align: top;
    border-radius: 8px;
}
</style>     
<body>
    <div style="display: inline-block;" class="put-your-pic">
        <img src="" alt="" class="rounded">
        <label for="img" class="getpic">+</label>
        <input type="file" class="img getpic" name="images" id="img" hidden>
    </div>
</body>

img标签是为上传图片后渲染到页面而准备的,可以说十分有十分的简单。

上传图片后渲染到页面

操作流程:
由于我们需要将图片发送至服务器并从服务器将信息渲染到页面,所以我们不能从本地获取图片地址,而要从服务器获取:
向服务器发送POST请求->获得result->从result取出图片地址->渲染至页面
因此,我们需要给上传图片文件的input添加事件为'change'的监听器,以查看是否有文件上传。html样式参看上一段落。

//封面选择
		//获得input对象
        const getpic_lis = document.querySelector('.img')
        //添加事件监听
        getpic_lis.addEventListener('change', (e) => {
        	//获取点击对象的文件:e.target.files[0]为收集到的文件
            const image = e.target.files[0]
            //创建表单对象
            const fd = new FormData()
            fd.append('image', image)
            //向服务器发送请求
            axios({
                url: '/v1_0/upload',
                method: 'POST',
                data: fd
            }).then(result => {
                console.log(result);
                //若响应码(result.status)正确->执行
                if (result.status >= 200 || result.status < 300) {
                	//要渲染的图片对象
                    const rounded = document.querySelector('.rounded')
                    //放入图片,result.data.data.url存放的是服务器返回的图片存储地址
                    rounded.src = result.data.data.url
                    //隐藏输入并显示图片
                    rounded.style.display = 'inline-block'
                    document.querySelectorAll('.getpic').forEach(item => {
                        item.style.display = 'none'
                    })
                }
            })
        })
        //监听图片对象,允许用户复选图片
        document.querySelector('img').addEventListener('click', () => {
            getpic_lis.click()
        })

可以说十分有九分的简单。

总结

经过实践我们可以发现,在前端渲染页面时要注意的要点有:

  1. 获取的标签属性(尤其在使用serialize之类方法快速获取表单数据时要注意,如插入富文本编辑器时,serialize无法直接获取编辑器内容,需要使用textarea标签同步编辑器内容,serialize再从textarea获取)
  2. 要提交的对象内容
  3. 取得的对象内容

这三个要点掌握后,处理数据的方法层出不穷,基础的遍历就不只有一两种,如for in,forEach,甚至最基础的for循环等。因此在处理页面时,一定要确保这几个对象的正确,而处理方法则可以通过对象属性自行调整。

以上的几种方法在其他应用方面也同样适用,如登陆后,从服务器获取用户信息,可以参考这里的获取图片地址,渲染商品列表则可以将二者结合


网站公告

今日签到

点亮在社区的每一天
去签到