ng-modle对select下拉选项的影响

本文探讨了AngularJS中使用下拉框(select)时出现空白项的问题,并通过实例展示了如何正确设置ng-model和ng-options以避免此现象。
事件背景

开发技术是AngularJs,上周五,开发页面的时候,有个下拉选框(select),用ng-model绑定了一个值A,选项是在另外一个数组B里面的内容,做成的页面里下拉选框中总有一个空白项,选中其他的选项以后,空白项有消失了,给人的感觉很不好。所以就这个专题尝试了一下。

代码

(代码的风格可能不太好,请路过大大多指点(:3/L)
首先是html:

<!DOCTYPE html>
<html>
    <head>
        <meta  content="text/html; charset=UTF-8" http-equiv="Content-Type"><!-- 正常显示中文用到的-->
        <title></title>
    </head>
    <style>
    select {
    width: 200px;
    }
    </style>
    <body ng-app="tapp">
        <div ng-controller="tCtrl">
            <!-- {{ data[0].value}}  -->
            <!-- <div ng-repeat="obj in data">{{obj}}</div> -->

            js初始化:$scope.selectedOne={};<br>
            第一个select:<select ng-model="selectedOne.value" ng-options="obj.value as obj.text for obj in data"></select><br>
            第一个select所选的value:   {{selectedOne}}
            <p></p>

            js初始化:$scope.selectedTwo='';<br>
            第二个select:<select ng-model="selectedTwo.value" ng-options="obj.value as obj.text for obj in data"></select><br>
            第二个select所选的value:   {{selectedTwo}}
            <p></p>

            js初始化:$scope.selectedThree={value:''};<br>
            第三个select:<select ng-model="selectedThree.value" ng-options="obj.value as obj.text for obj in data"></select><br>
            第三个select所选的value:   {{selectedThree}}
            <p></p>

            js初始化:$scope.selectedFour={value:'0',text:''};<br>
            第四个select:<select ng-model="selectedFour.value" ng-options="obj.value as obj.text for obj in data"></select><br>
            第四个select所选的value:   {{selectedFour}}
            <p></p>

            js初始化:$scope.selectedFive={value:'0',text:'hahaha'};<br>
            第五个select:<select ng-model="selectedFive.value" ng-options="obj.value as obj.text for obj in data"></select><br>
            第五个select所选的value:   {{selectedFive}}
            <p></p>

            js初始化:$scope.selectedFive={value:'',text:'hahaha'};<br>
            第六个select:<select ng-model="selectedSix.value" ng-options="obj.value as obj.text for obj in data">
                <option ng-init="">我来代表直接写option不写value的一项空白</option>
            </select><br>
            第六个select所选的value:   {{selectedSix}}
        </div>
    </body>
    <script type="text/javascript"  src="angular.js"></script>
    <script type="text/javascript" src="template.js"></script>
</html>

然后是js代码:

var tapp =angular.module('tapp', []);//原来定义的变量和APP的名字应该是一样的才行,左边这句话待验证

tapp.controller('tCtrl', function($scope){
    $scope.data=[
    {
        value:'0',
        text:'zero'
    },{
        value:'1',
        text:'one'
    },{
        value:'2',
        text:'two'
    },{
        value:'3',
        text:'three'
    },{
        value:'4',
        text:'four'
    },{
        value:'5',
        text:'我是来代表空白的'
    }
    ];

    $scope.selectedOne={};

    $scope.selectedTwo='';

    $scope.selectedThree={
        value:''
    };

    $scope.selectedFour={
        value:'0',
        text:''
    };

    $scope.selectedFive={
        value:'0',
        text:'hahaha'
    };
    $scope.selectedSix={
        value:'',
        text:'hahaha'
    };

});
结论

如果ng-model所绑定的变量的值在ng-options绑定的value里面有,下拉选框中就不会有空白的一项,选中别的数据项以后消失;

如果ng-model所绑定的变量的值不再ng-options绑定的value里面,下拉选框中就不会有空白一项,并且只有当ng-options绑定的value里有对应的text为空行时,这个空行才会一直存在于下拉选项里。

tip:要对应字段绑定,否则原来定义给变量的json串会被刷掉。
并且ng-model只绑定option的value值,本身有的text的值也不会被显示。就算在里面写option的文字内容或者ng-init也没用。
注意js里面的赋值要写成json的初始化语句,用“:”来赋值,否则会报错。再次强调注意赋值的顺序!!!!!!!不然变量的json格式会被刷掉!!

综上所述想要有一行是空行,就在ng-options的字典项里有一个value值对应的text为“”,并且先把ng-model的变量json的某一个字段附上这个value值,以后对于这个变量得赋值都要一项一项数据项的赋值。
关于上周末的问题,我认为在对于变量的赋值顺序和方式上面出了问题(:3/L)

select如果不写ng-model,下拉选框没有选项。写的时候别忘了,免得再调试半天。

### aui-select 组件的使用方法与模型绑定 `aui-select` 是一种常见的前端 UI 组件,通常用于实现下拉菜单功能。以下是关于 `aui-select` 的基本用法以及如何进行数据绑定的相关说明。 #### 基本结构 `aui-select` 的 HTML 结构一般如下所示: ```html <aui-select v-model="selectedValue"> <aui-option value="option1">选项一</aui-option> <aui-option value="option2">选项二</aui-option> <aui-option value="option3">选项三</aui-option> </aui-select> ``` 此代码片段展示了如何通过嵌套 `<aui-option>` 来定义可选项目,并利用 `v-model` 实现双向数据绑定[^1]。 #### 属性配置 `aui-select` 支持多种属性来增强其功能性。以下是一些常用的属性及其作用: | 属性名 | 类型 | 默认值 | 描述 | |--------------|---------|------------|----------------------------------------------------------------------| | placeholder | String | — | 设置占位符文字,在未选择任何项时显示 | | disabled | Boolean | false | 是否禁用该组件 | | multiple | Boolean | false | 是否支持多选 | | clearable | Boolean | true | 单选模式下是否可以清空已选项 | 这些属性可以通过直接设置到 `<aui-select>` 标签上来启用特定行为[^2]。 #### 数据绑定 (Model Binding) 为了使 `aui-select` 能够动态反映用户的交互操作,推荐使用 Vue.js 提供的 `v-model` 指令来进行数据绑定。例如: ```javascript data() { return { selectedValue: 'option1' // 初始选定值 }; } ``` 当用户更改下拉框中的选项时,`selectedValue` 将自动更新为其对应的值;反之亦然——如果程序逻辑修改了 `selectedValue`,界面也会同步刷新以反映最新状态[^3]。 对于多选情况下的绑定,则需注意将 `multiple` 设为 `true` 并提供数组类型的初始值给 `v-model` 所关联的数据字段。 #### 动态加载远程数据 某些场景可能需要从服务器端获取选项列表而非硬编码于页面之中。此时可通过监听事件或者异步请求完成这一需求。下面是一个简单的例子展示如何结合 Axios 库执行 HTTP 请求并填充选项内容: ```javascript methods: { async fetchData() { const response = await axios.get('/api/options'); this.optionsList = response.data.map(item => ({ label: item.name, value: item.id })); } }, mounted() { this.fetchData(); } ``` 随后可以在模板部分遍历渲染这些动态生成的结果作为可用的选择条目[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值