0

我正在学习 AngularJS,我对选择元素的数据绑定有疑问。文本框的数据绑定无需任何类型的事件处理代码即可工作。一旦设置了 ng-model 属性,文本框就会在模型属性更改时更新,反之亦然。不需要 ng-change 属性。

但是,对于选择元素,我们需要编写将通过 ng-change 属性调用的函数。

为什么 angularjs 在没有文本框的 ng-change 属性的情况下处理数据绑定,但需要通过 ng-change 属性为选择元素调用的函数?

更新:在评论部分添加了小提琴。该示例来自 AngularJS in Action 手册。单击其中一个故事,更改文本框值并更新模型。更改下拉模型中的选择不会更新。

更新:在评论中添加了一个新的小提琴。

谢谢。

4

3 回答 3

1

我认为您的困惑可能是由于选择的文档仍然不正确。(请参阅我的Disqus 评论。) ng-model可以而且应该与select. ng-change是可选的,它只是给你一个钩子,如果你想在每次选择的选项改变时做一些事情。

通常您应该ng-options与 select 一起使用。

于 2013-03-23T21:13:30.570 回答
1

我创建了一个在这里工作的小提琴 - 问题实际上只是这里的虚拟数据。在原始小提琴中,在状态数组中为 {name:'Back Log'} 和 {name:'To Do'} 创建的对象与 {name:'Back Log'} 不同(不是 ===)和在虚拟故事对象中创建的 {name:'To Do'} 对象。

为了使示例工作,我将索引状态传递给 getStories 函数。但是我认为这实际上只是演示引起的混乱。(我也一直在研究 Angular in Action 的 MEAP,我认为它可以像这样简化一点,它使用简单的字符串状态,可以通过 === 测试

var getStories = function(statusesIndex) {
    var tempArray = [
        {title:'Story 00',
         description:'Description pending.',
        status: statusesIndex['To Do']
        },
        {title:'Story 01',
         description:'Description pending.',
         status: statusesIndex['Back Log']
        }
];
    return tempArray;
}
于 2013-04-01T20:14:23.277 回答
0

如果我正确理解了您的问题,那么我认为您的猜测是错误的,因为对于选择框,您不必调用 ng-change 事件来获取所选选项。

<select ng-model='select'>
  <option>....</option>
  <option value='one'>One</option>
  <option value='Two'>Two</option>
</select>

// Your selected option will print below... without invoking ng-change
<div>You selected: {{select}}</div>

演示:http: //jsfiddle.net/jenxu/1/

于 2013-03-23T06:51:38.853 回答