2016-05-27 2 views
2

У меня есть массив объектов, как этот

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; 

Есть способ обновить выбранный пользовательский телефон при выборе выбранного пользователя, не используя $ watch и набив «$ scope.data.userPhone» в сторона это?

ответ

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

+0

Да, совсем забыл использовать нг-варианты есть. большое спасибо – Kresent

2

Один из вариантов будет иметь

$scope.data.userPhone = function() { 
    return UserListModel.items[$scope.data.selectedUser].phone; 
} 

Это будет означать, что, хотя вы должны были бы обновлять какие-либо привязок использовать data.userPhone() вместо.

Это может быть хуже, чем использование часов, поскольку функция будет вызвана во время каждого дайджеста.

Не зная, как обновляется selectedUser. Трудно предложить лучший способ, так как с большинством вещей это зависит.

Смежные вопросы