2013-03-23 61 views
0

我正在学习AngularJS,并且对于select元素的数据绑定有一个问题。数据绑定的文本框没有任何事件处理代码。一旦ng-model属性被设置,textbox会在模型属性更改时更新,反之亦然。不需要ng-change属性。AngularJS不一致的数据绑定

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

为什么angularjs手柄绑定没有NG-改变属性的文本框,但要求将通过NG-改变属性被要求选择要素的功能呢?

UPDATE: 添加在评论部分的小提琴。这个例子来自AngularJS in Action书。点击其中一个故事,更改文本框的值并更新模型。更改下拉模式中的选择不会更新。

UPDATE: 添加在评论一个新的小提琴。

谢谢。

+0

你尽显通过硬编码''

+0

这里是小提琴:HTTP://jsfiddle.net/a5SUS/32/ – Alper 2013-03-25 03:11:35

+0

使用浏览器控制台会看到错误'typesIndex是undefined'。你在一个函数中使用它,但没有在任何地方定义 – charlietfl 2013-03-26 21:26:06

回答

1

我已经创建了一个工作here小提琴 - 这个问题真的只是虚此数据。在原始的小提琴中,在{name:'Back Log'}和{name:'To Do'}的状态数组中创建的对象与{name:'Back Log'}不一样(不是===)和{名称:'待办事项}}在虚拟故事对象中创建的对象。

为了使示例工作,我将索引状态传递给getStories函数。不过,我认为这实际上只是演示引起的混淆。 (我一直在寻找的MEAP在行动角,以及,我认为它可以简化一点like this one,使用简单的字符串的状态,将通过===测试

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; 
} 
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/

+0

当我改变选定的选项时,改变不会反映在模型中。 – Alper 2013-03-23 14:30:50

+0

@Alper演示答案。创建您自己的演示,复制问题 – charlietfl 2013-03-23 14:34:07

+0

@charlietfl演示创建。 – Alper 2013-03-26 18:07:46

1

我觉得你的困惑可能的select documentation仍然不正确的结果。 (请参阅我的Disqus comment。)ng-model可以并且应该与select一起使用。 ng-change是可选的,如果每次选定选项更改时都想要执行某些操作,它只会为您提供挂钩。

通常你应该使用ng-options加上select。

+0

如果没有ng-change,我无法获得双向绑定。看到我上面的评论和相关的小提琴。 – Alper 2013-03-28 03:14:55