2017-09-18 5 views
3

私はランダムにすべての項目をクリック可能なリストを生成しようとしています。ランダムでng-repeatを使用する

<ul class="list-group"> 
    <li class="list-group-item" ng-repeat="user in users | orderBy: random" ng-class="user.value && user.color" ng-click="changeValue(user)"> {{user.name}}</li> 
    </ul> 

クリックすると、項目の値と色も変更されます。

私はすでにランダムに次の関数でリストを生成できます。

$scope.random = function() { 

    return 0.5 - Math.random(); 

}; 

私が直面してる問題は、私は、リストの項目をクリックすると、彼らはランダムに再配置していることです。私はそれらを最初に無作為に表示して、それをクリックした後、まったく同じ順序にとどまるようにします。再編成を避けるにはどうすればいいですか?ここで

は、実用的な例とplunkerです:

DEMO

ありがとうございました。

答えて

2

こんにちは、私は本当にあなたのためにその値プロパティを使用したいものを取得していないが、これはあなたの問題のほとんどを解決します:

index.htmlを

<li class="list-group-item" ng-repeat="user in users" ng-class="user.value && user.color" ng-click="changeValue(user)"> {{user.name}}</li> 

script.js

angular.module("demo", []); 

angular 
    .module("demo") 
    .controller("demoController", ["$scope", function($scope) { 
    $scope.users = shuffleArray([{ 
     name: "John", 
     age: 22, 
     value: false, 
     color: "green" 
    }, { 
     name: "Leo", 
     age: 54, 
     value: false, 
     color: "blue" 
    }, { 
     name: "Matt", 
     age: 35, 
     value: false, 
     color: "red" 

    }]); 
    function shuffleArray(array){ 
     for (var i = array.length - 1; i > 0; i--) { 
      var j = Math.floor(Math.random() * (i + 1)); 
      var temp = array[i]; 
      array[i] = array[j]; 
      array[j] = temp; 
     } 
     return array; 
    } 


    $scope.changeValue = function(obj){ 
     obj.value = !obj.value; 
    }; 



    }]) 

ここでそれを確認してください: https://plnkr.co/edit/i9YDktypVqEl7BJ9GNEr?p=preview

+0

をユーザーがリストをクリックすると、それは無作為化すべきでありません。彼はランダムな名前を1回だけ望むが、ユーザーがリストをクリックしたときは望んでいない。 – jParmar

+0

値は色をトリガするために使用されます。ユーザーがクリックするとtrueになり、クラスがアクティブになり、ユーザーが再度クリックすると値はfalseになり、クラスは非アクティブになります。 あなたが送ったプランカから、クリックごとに注文を並べ替え続けます。それはまさに私が避けようとしていることです。 ありがとうございました:) –

+0

私の悪い質問を理解できませんでした。申し訳ありません、私は答えを編集して固定しました。 – pegla

2

申し訳ありません[OK]を、私は上で、これはそれを行う必要があり、私の最初の答えでこれを複雑にしている場合があります - HTMLで一度だけ、それをバインドします

<li class="list-group-item" ng-repeat="user in ::users | orderBy: random" ng-class="user.value && user.color" ng-click="changeValue(user)"> {{user.name}}</li> 

https://plnkr.co/edit/fp3UTn7CLql3zCT9EzBU?p=preview

+0

ありがとうございます!バインディングの「::」について一度だけ知りませんでした。まだ勉強してる。あなたの時間と答えをありがとう:) –

+0

これを簡単に見ていただけますか? https://plnkr.co/edit/MfKHbP5Ng3YCZ8LWOvNF?p=preview 違いは何ですか?私はまた、一度だけバインドするようにしましたが、再配置します。 –

+0

無限のダイジェストループの問題があります。コンソールのエラーをチェックしてください。 – pegla

関連する問題