AngularJS+Layui开发下拉框遇到的问题

最近在做一个项目,前端使用的是AngularJS处理后台传过来的数据,因为下拉框一直用的是原生的,倒是没遇到什么问题。直到我后来遇到了Layui,因为项目原先的前端做的很烂,兼容性特别差,然后我就想着用Layui重新做个前端,之后问题就来了……

用过Layui的都知道,她的下拉框是在原生的select上用div的形式显示出来的,比原先的会好看很多,每次动态创建下拉框之后,我们都需要调用form.render();或者form.render('select');来重载下拉框。其他的我不知道,反正看社区里的用js循环拼接的下拉框好像都是可以用render来重载的。

但是我TM用AngularJS就死活都不可以,看看前端代码:

<select name="province" id="province">
    <option value="">请选择省</option>
    <option ng-repeat="item in provinceList" value="{
  {item.name}}">{
  {item.name}}</option>
</select>

这样写是可以正常显示出来没错,在筛选或者添加这种操作中没有问题,但是在修改中,问题就会暴露出来了。

<select name="province" id="province">
    <option value="">请选择省</option>
    <option ng-repeat="item in provinceList" ng-selected="item.name = province" value="{
  {item.name}}">{
  {item.name}}</option>
</select>

这样写了之后我就发现,在检查视图中我可以看到select其实已经构建好了,包括选中项的状态也是对的,但是前段显示的就是没有。包括后来我用$(id).val();的方式赋值,结果更为过分,省份是选中了,但是市和区都还是默认的“请选择市/区”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在 layui 中实现多级下拉框可以使用官方提供的下拉框组件 `select`,并结合异步加载数据实现。 具体实现步骤如下: 1. 在 HTML 中定义多个 `select` 元素,每个元素绑定一个事件触发函数。 2. 在事件触发函数中,获取当前 `select` 元素选中的值,发送异步请求获取下一级数据,并根据数据动态生成下一个 `select` 元素。 3. 依次类推,直到生成最后一级下拉框。 以下是一段示例代码,供参考: HTML: ```html <div class="layui-input-inline"> <select id="province" lay-filter="province"> <option value="">请选择省份</option> </select> </div> <div class="layui-input-inline"> <select id="city" lay-filter="city"> <option value="">请选择城市</option> </select> </div> <div class="layui-input-inline"> <select id="district" lay-filter="district"> <option value="">请选择区县</option> </select> </div> ``` JavaScript: ```javascript layui.use(['form', 'layer'], function() { var form = layui.form; var layer = layui.layer; // 异步获取省份数据 function getProvinceData(callback) { // 发送异步请求,获取数据 // ... var data = [{ id: '110000', name: '北京市' }, { id: '120000', name: '天津市' }, { id: '130000', name: '河北省' }]; callback(data); } // 异步获取城市数据 function getCityData(provinceId, callback) { // 发送异步请求,获取数据 // ... var data = [{ id: '110100', name: '市辖区', parentId: '110000' }, { id: '110200', name: '县', parentId: '110000' }, { id: '120100', name: '市辖区', parentId: '120000' }]; callback(data); } // 异步获取区县数据 function getDistrictData(cityId, callback) { // 发送异步请求,获取数据 // ... var data = [{ id: '110101', name: '东城区', parentId: '110100' }, { id: '110102', name: '西城区', parentId: '110100' }, { id: '120101', name: '和平区', parentId: '120100' }]; callback(data); } // 生成下拉框选项 function generateOptions(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } return options; } // 生成下一级下拉框 function generateNextSelect(id, data) { var select = '<div class="layui-input-inline"><select id="' + id + '" lay-filter="' + id + '"><option value="">请选择</option>' + generateOptions(data) + '</select></div>'; return select; } // 初始化省份下拉框 getProvinceData(function(data) { var select = generateNextSelect('province', data); $('#province').parent().after(select); form.render('select'); }); // 监听省份下拉框选中事件 form.on('select(province)', function(data) { var provinceId = data.value; if (!provinceId) { // 如果省份未选择,则清空城市和区县下拉框 $('#city').parent().nextAll().remove(); form.render('select'); return; } // 异步获取城市数据 getCityData(provinceId, function(data) { // 生成城市下拉框 var select = generateNextSelect('city', data); $('#city').parent().nextAll().remove(); $('#city').parent().after(select); form.render('select'); }); }); // 监听城市下拉框选中事件 form.on('select(city)', function(data) { var cityId = data.value; if (!cityId) { // 如果城市未选择,则清空区县下拉框 $('#district').parent().nextAll().remove(); form.render('select'); return; } // 异步获取区县数据 getDistrictData(cityId, function(data) { // 生成区县下拉框 var select = generateNextSelect('district', data); $('#district').parent().nextAll().remove(); $('#district').parent().after(select); form.render('select'); }); }); }); ``` ### 回答2: layui是一种流行的前端开发框架,它提供了丰富的组件和工具,方便开发人员快速搭建网页界面和实现复杂的交互效果。其中,layui的多级下拉框是一种常用的表单形式。 多级下拉框可以实现多层级的选择功能,常见的应用场景包括省市县三级联动选择、商品分类选择等。在layui中,使用多级下拉框可以轻松实现这些功能。 通过layui的form组件,我们可以定义一个select元素,并为其设置lay-filter属性。然后,可以通过layui的form.on事件监听select元素的变化,根据选择项的不同动态加载下一级的选项。 具体的实现步骤如下: 1. 在HTML中,定义一个select元素,并为其设置id和lay-filter属性。lay-filter属性用于标识该下拉框,以便后续的事件监听。 2. 在JavaScript中,使用layui的form.on事件监听select元素的变化。 3. 在监听函数中,根据选择的值动态加载下一级的选项。可以使用Ajax请求获取数据,并将数据渲染到下一个select元素中。 4. 重复步骤3,直到所有的下级选项都被加载完成。 需要注意的是,在数据加载完成后,需要重新渲染select元素,以使新加入的选项生效。 总之,layui的多级下拉框是一种简单实用的表单元素,通过设置lay-filter属性和监听事件,可以轻松实现多层级选择的功能。通过灵活运用,我们可以根据实际场景,定制多级下拉框,满足不同的需求。 ### 回答3: Layui多级下拉框是一款基于Layui框架的扩展插件,用于实现多级联动的下拉选择功能。它能够方便地实现多个下拉框之间的数据关联和级联效果,提升用户的选择体验。 Layui多级下拉框的使用非常简单。首先,我们需要引入Layui框架的相关文件,包括layui.css和layui.js。然后,在HTML页面中添加下拉框的HTML结构,设置好各个下拉框的ID和class,并为其添加必要的属性。 接着,通过JavaScript代码来初始化多级下拉框,并设置相关参数。可以使用layui.form模块来监听下拉框的选择事件,根据选择的值动态加载下一级下拉框的数据,实现级联效果。在数据加载完成后,可以调用layui.form.render()方法来重新渲染下拉框,使其显示新加载的数据。 需要注意的是,在使用Layui多级下拉框时,我们需要提前准备好相关的数据源。可以通过Ajax请求后台接口获取数据,也可以通过JavaScript数组的形式进行定义。无论采用何种方式,都需要保证数据的格式正确,并与下拉框的关联关系一致。 总的来说,Layui多级下拉框是一款功能强大、易于使用的下拉选择插件。它可以帮助我们更加方便地实现多级联动的下拉选择功能,并提升用户的交互体验。无论是在表单选择、数据筛选,还是地区选择等场景下,Layui多级下拉框都能发挥出很大的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值