我有一个像这样的对象数组
UserList = [
{name:'user1',id:1,data:{}},
{name:'user4',id:4,data:{}},
{name:'user7',id:7,data:{}}
]
并且html选择这样
<select ng-model="data.selectedUser">
<option ng-repeat="item in data.items" value="{{item.id}}">{{item.name}}</option>
</select>
<p>{{data.userPhone}}</p>
在我的控制器中,我使用
$scope.data = {};
$scope.data.selectedUser = 0;
$scope.data.items = UserListModel.items;
$scope.data.userPhone = UserListModel.items[$scope.data.selectedUser].phone;
有没有办法在selectUser更改时更新所选用户手机而不使用$ watch并填充&#34; $ scope.data.userPhone&#34;在里面?
答案 0 :(得分:2)
一种可能性是
$scope.data.userPhone = function () {
return UserListModel.items[$scope.data.selectedUser].phone;
}
这意味着您必须更新任何绑定才能使用data.userPhone()
。
这可能比使用手表更糟糕,因为在每个摘要中都会调用该函数。
在不知道selectedUser
如何更新的情况下,很难建议最佳方式,因为大多数事情都取决于它。
答案 1 :(得分:2)
想象一下,你有这样的数据:
$scope.data = {};
//set the data
$scope.data= [{
id: 1,
name: "cyril",
phone: "1234567"
}, {
id: 2,
name: "josh",
phone: "1237"
}, {
id: 3,
name: "sim",
phone: "4567"
}];
//selected hold the object that is selected in the selectbox.
$scope.selected = $scope.data[0];
您的HTML将如下所示,所以现在当您从列表中选择新用户时,它将在模型selectedItem
中更新,selectedItem
具有电话号码在它(所以你不需要手表来单独更新电话号码)。
<body ng-controller="MainCtrl">
<p>selected item is : {{selectedItem}}</p>
<p> name of selected item is : {{selectedItem.name}} </p>
<select ng-model="selectedItem" ng-options="item.name for item in items track by item.id"></select>
</body>
工作示例here