zoukankan      html  css  js  c++  java
  • AngularJS 中ngOptions使用时需要注意的问题

    使用angularjs 中的select时遇到一个问题,设定了下拉框的集合,绑定了ngModel,并且该model的值有一个预设的值,当显示时的select下拉框则找不到预设值:

    $scope.Options = {
        selectedOption:{
            id:0,
            name:"test0"
     },
    availableOptions:[{
        id:0,
        name:"test1"
    },
    {
        id:1,
        name:"test2"
    },
    {
        id:2,
        name:"test3"
    }]
    };
    

    后来在api说明中找到了缘由地址

    Complex Models (objects or collections)

    复杂model:默认情况下,ngModel通过引用而不是值来监控model。
    当你想预选中一个option时,例如如果你设置一个object和你集合中的某个object相等,ngOptions将不能够设定这个选项,这是因为objects的引用是不相同的。
    所以你需要始终引用你集合中的那个项来进行预设定select的值。例如$scope.selected = $scope.collections[3];
    另外一个解决方式是使用track.因为ngOptions将会根据标识而非引用来track每项,例如如果你的collection items中有一个属性是id,那将可以使用track by item.id

    另外一个对象或者集合的问题是ngModel不会检测一个对象的属性或者一个集合中的items是否改变。由于这个原因,ngOptions添加了一个$watchCollection来监控model的改变,当表达式包含了一个track by clause 或者select包含多行属性,则这个允许ngOptions触发一次options的重绘,即使实际的object/collection 没有改变,但是只有object的一个属性或者collection中的一个item改变。

    需要注意的是$watchCollection对object的属性(或者是model是个数组时,collection的items)会做一个浅比较。这意味着改变一个object内部更深的而非第一层级的属性将不会触发重绘。

  • 相关阅读:
    用webservice实现的一个天气预报程序
    让VS.net2005手机模拟器上网
    EVC4.0 PPC2003 Emulator 转中文版
    BSTR转CString
    在pocket pc 2003上播放声音
    VC++.net 2005 SmartDevice 屏幕转向
    c#.net2005 调用evc4.0生成的dll文件
    Json
    adb 命令模拟按键事件
    bat 截取字符
  • 原文地址:https://www.cnblogs.com/luckyflower/p/5027076.html
Copyright © 2011-2022 走看看