32

変数selectedSubTopicIdがあり、subTopic オブジェクトの配列があります: objectiveDetail.subTopics[]. 各subTopic オブジェクトにはフィールドがあります subTopicId

これを使用して、トピックの追加ボタンを有効または無効にしたいと思います。ng-disabled で lodash を使用してこの配列をテストし、配列subTopicのオブジェクト要素subTopicIdselectedSubTopicId.

ObjectiveDetail にあるデータのサンプルを次に示します。この場合、subTopics 配列には 1 つの要素しかありません。

{"objectiveDetailId":285,
 "objectiveId":29,
 "number":1,
 "text":"x",
 "subTopics":[{"subTopicId":1,
               "number":1}]
}

thefourtheye によって提案された私の Angular Controller のコードは次のとおりです。

    $scope.checkDuplicateSubTopicId = function (objectiveDetail, sSubTopic) {
        if (_.some(objectiveDetail.subTopics, function(currentTopic) {
            return _.contains(currentTopic, selectedSubTopicId);
        })) {
            return true;
        } else {
            return false;
        }
    }

クリック機能が表示されていないボタンは次のようになります。

   <button data-ng-disabled="checkDuplicateSubTopicId(objectiveDetail, subTopicId)">
       Add Topic
   </button>

問題は、それがうまく機能しておらず、ボタンが無効になっていることを示していないことです。

4

4 に答える 4

49

あなたはそれを行う方法を尋ねませんでしたが、それがあなたが知りたかったことだと思います.

既に述べたよう_.someに、配列内のすべての要素を反復処理し、コールバックを実行する を使用できます。そのコールバックで、トピックのプロパティの値が変数の値と等しいかどうかをテストできます。

var result = _.some(objectiveDetail.subTopics, function (topic) {
  return topic.subTopicId === selectedSubTopicId;
});

_.someコールバックが返す要素が見つかった場合、残りの要素をスキップしますtrue

于 2014-01-22T09:56:44.300 に答える
2

_.someこのようにメソッドを使用できます

var _ = require("lodash");

var objectiveDetail = {"objectiveDetailId":285,
 "objectiveId":29,
 "number":1,
 "text":"x",
 "subTopics":[{"subTopicId":1,
               "number":1}]
};

var selectedSubTopicId = 1;

if (_.some(objectiveDetail.subTopics, function(currentTopic) {
    return currentTopic.subTopicId === selectedSubTopicId;
})) {
    console.log("selectedSubTopicId exists");
}

出力

selectedSubTopicId exists
于 2014-01-22T09:26:49.557 に答える