1

私の目標は、特定の出版物に関連付けられているすべての著者を表示するタグを迅速に作成することです。

$scope.publications.authors単一の値に設定すると、すべてが機能します。以下に示すように、複数の値が配列に格納されている場合は機能しません。

AngularJS ngShow ディレクティブの条件文が配列に使用するのに適していないことはわかっていますが、実際に何を使用すればよいかわかりません。

HTML:

<div ng-repeat="person in persons" ng-show="person.firstName == publication.authors">{{person.firstName}}</div>

JS:

$scope.publications = [
{"title": "Research Paper",
 "authors": ["Bill", "George"]};

$scope.persons = [
{"firstName": "Bill",
 "lastName": "Smith"},
{"firstName": "George",
 "lastName": "Jones"},
{"firstName": "Mike",
 "lastName": "Thomas"};
4

3 に答える 3

2

のデータ構造によるとpublications、ネストされたリピーターが必要です。personまた、 currentとpublication渡された関数を使用して、ディスプレイを駆動できます。

<div ng-repeat="publication in publications">{{publication.title}}
    <br/>
    <div ng-repeat="person in people" ng-show="show(person, publication)">{{person.firstName}}</div>
</div>

function ctrl($scope) {
    $scope.publications = [{
        "title": "Research Paper",
            "authors": ["Bill", "George"]
    }];

    $scope.people = [{
        "firstName": "Bill",
            "lastName": "Smith"
    }, {
        "firstName": "George",
            "lastName": "Jones"
    }, {
        "firstName": "Mike",
            "lastName": "Thomas"
    }];

    $scope.show = function (person, publication) {
        return publication.authors.indexOf(person.firstName) >= 0;
    }
}
于 2013-08-16T00:17:14.087 に答える
2

要素が存在するかどうかを確認し、persons内で呼び出すことができるコントローラー内の関数を作成しますng-show。以下のフィドルを確認してください:

http://jsfiddle.net/HB7LU/323/

于 2013-08-15T23:32:50.090 に答える
0

これを行う最善の方法は、DOM 内のすべてのデータを反復しようとするのではなく、コントローラーでメソッドを使用することだと思います。

メソッドを使用してそれを行う方法は複数あります。作成者のすべての名前を 1 行にまとめたい場合は、作成者を取得してすべての名前を含む文字列を返し、このメソッドを使用して div のコンテンツを参照するメソッドを作成できます。

{{getAuthors(publication.authors}}

名前の配列を返し、このようなもので ng-repeat を使用して反復するメソッドを持つこともできます

于 2013-08-15T23:35:44.180 に答える