0

すべてのリストと、各リストに関連付けられたタスクを表示しようとしています。私のコントローラーには次のものがあります:

$http.get('api/list/').success(function (data) {
            $scope.lists = data;
            $scope.tasks = data[0].Task;
        });

これは最初の項目で機能しますが、もちろん data[0].Task は動的である必要があります。私が抱えている問題は、これが各リストに対して1回呼び出されることです。変数を使用してみましたが、元の値にリセットされます。また、コールバックを使用してみましたが、運がありません。何を見落としているのか、それともすべて間違っているのかわかりません。

4

3 に答える 3

1

あなたの最善の策は、ファクトリで http.get をラップしnew、タスクを含むリストの表現を返すようにすることです。このようにして新しい参照を取得し、既存のオブジェクトを上書きしません。基本的に、成功の解決で http.get が新しい List オブジェクトを返すようにする必要があります。

その後、コントローラーは promise の解決を取得し、新しいリスト オブジェクトを取得して、それをスコープ上の何かにバインドします。これにより、ページの残りの部分がフィルター処理され、ページの存続期間中、既存のリスト/タスクを保持できます。

于 2013-09-24T20:05:19.293 に答える
0

リクエストGET api/list/すると、おそらく次のようなものが返されます。

[
    {
        "id": 1,
        "name": "List #1",
        "tasks": [
            {
                "id": 1,
                "name": "Task #1 on List #1"
            },
            {
                "id": 2,
                "name": "Task #2 on List #1"
            },
            {
                "id": 3,
                "name": "Task #3 on List #1"
            }
        ]
    },
    {
        "id": 2,
        "name": "List #2",
        "tasks": [
            {
                "id": 1,
                "name": "Task #1 on List #2"
            },
            {
                "id": 2,
                "name": "Task #2 on List #2"
            },
            {
                "id": 3,
                "name": "Task #3 on List #2"
            }
        ]
    }
]

これは、関連付けられたタスクを常にapi/list/コマンドで返す必要があることを前提としています。

その後、すべてのリストとすべてのタスクを更新するたびに、これを 1 回呼び出すだけで済みます。

$http.get が呼び出されるビューにバインドされた単一のコントローラーが必要です。$scope.lists = data成功するはずです。

ng-repeatビューでは、ネストされた 2 つのタグが必要なだけです。たとえば、順序なしリストを使用できます。

<div ng-controller="ListsController">
    <ul>
        <li ng-repeat="list in lists">
            <ul>
                <li ng-repeat="task in list.tasks">

                </li>
            </ul>
        </li>
    </ul>
</div>

私はangularを使用していませんが、これで十分だと確信しています。1 回の AJAX 呼び出しで、各リストの要素が入力され、そのリストに属する各タスクの要素<li>がネストされます。<li>

于 2013-09-25T14:07:46.993 に答える
0

各リストにタスクがあり、それらのリストが必要な場合は、次のようにできます。

$scope.tasks = data.map(function(obj){return obj.task;})

map関数が各リストに対して返すものに基づいて配列を作成します。

于 2013-09-24T19:59:25.687 に答える