2013-06-21 13 views
5

ben seçilmiş bir widget ve angularjs kombinasyonunda ng-modeli ayarlama hakkında bir sorum var (bu videoyu izleyin: https://www.youtube.com/watch?v=8ozyXwLzFYs)Açısal +: Seçilen değerler

Ne yapmak istiyorum bazı değerlere alıcıları belirlemek için hangi önceden seçilmiş olurdu. bunlar de, işte önceden seçilmiş değildir Birkaç kombinasyonunu ama menüde değerleri denedik

$scope.recipientsList = []; 
    $scope.recipients = []; 
    $scope.fetchRecipients = function() { 
     $http.get($scope.url).then(function(result){ 

     $scope.recipientsList = [ 
    {"id":0, "name":"Recipient 0"}, 
    {"id":1, "name":"Recipient 1"}, 
    {"id":2, "name":"Recipient 2"}, 
    {"id":3, "name":"Recipient 3"}, 
    {"id":4, "name":"Recipient 4"}, 
    {"id":5, "name":"Recipient 5"}, 
    {"id":6, "name":"Recipient 6"}, 
    {"id":7, "name":"Recipient 7"}, 
    {"id":8, "name":"Recipient 8"}, 
    {"id":9, "name":"Recipient 9"}, 
    {"id":10, "name":"Recipient 10"} 
]; 
    $scope.recipients = [{"id":0, "name":"Recipient 0"}, 
    {"id":1, "name":"Recipient 1"}]; 
    }); 
    } 

    $scope.fetchRecipients(); 

denetleyicisi HTML ve JS bu örneğin (videodan)

<h1>Chosen</h1> 
    <select data-placeholder="Choose a Recipient" multiple class="span4 chzn-select" chosen 
     ng-model="recipients" ng-options="recipient.name for recipient in recipientsList"> 
    </select> 

    <p ng-repeat="recipient in recipients"><strong>{{recipient.name}}</strong></p> 

Ve JS olduğunu alıcıların içinde saklanır, çünkü bunlar menünün altında görünür. Bu örneği burada görebilirsiniz: http://jsfiddle.net/YKZSw/8/

Sizin için teşekkürler.

Matej

cevap

4

angularjs ngOptions nitelik veri kaynağı olarak verilen diziden bir öğe seçer. Durumunuzda, alıcılarList dizisi belirli sayıda nesne içerir. Yine de, önceden seçmek istediğiniz öğeler, benzer olsalar bile, nesne eşitsizliği nedeniyle listede yer almamaktadır. Alıcılar AnlamıList: {"id": 0, "name": "Recipient 0"} alıcılara eşit değil: {"id": 0, "name": "Recipient 0"} (Aynı şeyi JS konsolu). Açısal, öğeyi listede bulamaz ve bu nedenle önceden seçilmez.

Bu modifiye keman çalışır: http://jsfiddle.net/mananbharara/YKZSw/9/ bu durumda tek fark alıcıları tanımı geçerli:

$scope.recipients = [$scope.recipientsList[0], $scope.recipientsList[1]];

Bu durumda tek liste var ve seçilen değerler bu listeye sadece gelebilir.

İki listeyi korumak zorunda olmanız durumunda kullanacağınız bu yaklaşıma bir alternatif, seçim değerini ilkel tip olarak tutmaktır. Bu durumda ilkel eşitlik her zaman beklerdi.

+0

Bu davranış, filtreler söz konusu olduğunda sorunlara neden olmaz mı? İşte bu konunun ön seçimden çıktığı bir jsfiddle, bunu çözmek için herhangi bir öneri var mı? http://jsfiddle.net/wKMZM/13/ – ragche

+0

"myModel" öğesinin başlangıç ​​değerini ayarlarken bir hata yaptığınız anlaşılıyor. İşaretlemenizin önerdiği şey, başlangıç ​​değerini bir 'Nesne' olarak ayarlarken dize değerlerine bağlamak istediğinizdir. İşte çalışıyor gibi görünüyor [güncelleştirilmiş keman] (http://jsfiddle.net/wKMZM/15/). Yerine '$ scope.myModel = {type: 'ninjacat'};, işe yarayan şey:' $ scope.myModel = 'ninjacat' – manan

6

AngularJS sürüm 1.1.5'ten beri, bir track by yan tümcesi eklediler.

Bu yardımcı olacaktır. Durumunuzda, bir parçayı kimliğe göre ekleyebilirsiniz.