发表于: 2017-06-22 00:17:47

1 954


今天完成的事:学习了一波ng-options的写法,明白了很多不一样的数据源。假设有如下一段json数据:


{
"myOptions": [
{
"id": 106,
       "group": "Group 1",
       "label": "Item 1"
   },
   {
"id": 107,
       "group": "Group 1",
       "label": "Item 2"
   },
   {
"id": 110,
       "group": "Group 2",
       "label": "Item 3"
   },

}

$scope.myOptions = data.myOptions;

这段数据很简单: 我有一些分组,每个分组都包含自己的一些选项.如果要直接用这些数据创建select元素是很麻烦的.所以,我把代码重构成下面这样: angularjs会自动进行分组。

<select>
       ng-model="myOption"
ng-options="value.id as value.label group by value.group for value in myOptions">
<option>--</option>
</select>

ng-model的值会指向select元素的当前选中项的value值. ng-options指令会用于填充select下拉选项,它的值还需要深究一下: 我们从右边往左边看会比较容易,首先是: value in myOptions  它表示你要迭代当前作用域下的 myOptions 对象. 迭代时,myOptions对象里的每一项的名字就叫value.  接下来是: group by value.group  它告诉angular.js去创建这个标签。

<optgroup label="value.group">
   ...
</optgroup>

标签的label属性将会被value的group属性值填充.  最后是: value.id as value.label  value.id将会和模型进行绑定,它的值会被存进ng-model属性里去(也就是option的value值,被选中后就是select标签的value). 如果你没有写value.id as,而是只写了value.label,那么,整个对象会被作为ng-model的值。

value.label就是option元素的选项名.这段代码渲染的结果如下:

<optgroup label="Group 1">
   <option value="0">Item 1</option>
   <option value="1">Item 2</option>
</optgroup>

注意一下options的value属性: 你可能认为它的值应该是数据模型中的id属性值,但事实并非如此(虽然一开始我也这么认为).事实上,它是一个递增的数字,这个数字指向的是模型的索引值(这里的模型就是myOptions数组).不用担心它-当用户选择某一项的时候,正确的id还是会被选中,并且传递到ng-model属性中去.另外,如果你的ng-options表达式里没有value.id部分,那选中项对应的整个对象会成为ng-model的值.



明天计划完成的事:继续完成anluar的任务,试着写下所有的url在factory里面。




返回列表 返回列表
评论

    分享到