2017-10-19 18 views
0

私はAngularjsの初心者です。データ駆動型のアコーディオンを作成しようとしています。私はangular-uiを使いたくない。ブートストラップ3を解くためのチュートリアルに従いましたが、私はこのコードを思いついたのですが、私はそれをデータ駆動型にしようとしています。AngularJS:appst.jsのフィールドにブートストラップの折りたたみdivをリンクする

HTML:

<div class="my-page__my-list-acc" ng- 
    if="field.fieldAccordions"> 
      <div id="accordion_{{ $index }}"> 
    <div class="panel my-panel-overrides"> 
    <a class="my-panel-heading" data-toggle="collapse" data-parent="#accordion_{{ $index }}" data-target="#collapse1"> 
     {{field.fieldAccordionHeader }} </a> 
    <div id="collapse1" class="collapse in"> 
     {{ field.fieldAccordionItem }} 
    </div> 
    </div> 
</div> 
</div> 

JS:

fieldAccordions: [{ 
      fieldAccordionHeader: 'text', 
        fieldAccordionItem: 'text', 
        }], 
        },{ 

fieldAccordions: [{ 
      fieldAccordionHeader: 'text', 

        fieldAccordionItem: 'text',   
        }], 
        },{ 

私はHTMLとアコーディオンの異なる部分を結ぶトラブルを抱えています。プログラムはfieldAccordionsを見つけてパネルを作成しますが、fieldAccordionHeaderセクションとfieldAccordionItemセクションには到達しません。

また、私は別のfieldAccordionsアイテムを作成すると、すべてのアイテムをクリックするだけで元のfieldAccordionsフィールドを閉じる/開くことができます。

何か助けていただければ幸いです。私はこれがおそらくまっすぐであることを認識していますが、それは私がそれをより良く理解する助けになります。 plunkrが理想的です!

+0

あなたのJSは意味をなさない。これは複製されたオブジェクトの不十分/部分的に形成された配列です。あなた自身の質問をきれいにしてください。 – jbrown

答えて

0

私があなたの質問を理解したところから、個々のアコーディオンを表すオブジェクトの配列からアコーディオンをレンダリングしようとしています。

var app = angular.module('accordions', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
$scope.fieldAccordions = [{ 
 
    fieldAccordionHeader: 'Header 1', 
 
    fieldAccordionItems: [{ 
 
    desc: 'Item 1 - A' 
 
    }, { 
 
    desc: 'Item 1 - B' 
 
    }] 
 
}, { 
 
    fieldAccordionHeader: 'Header 2', 
 
    fieldAccordionItems: [{ 
 
    desc: 'Item 2' 
 
    }] 
 
}, { 
 
    fieldAccordionHeader: 'Header 3', 
 
    fieldAccordionItems: [{ 
 
    desc: 'Item 3' 
 
    }] 
 
}]; 
 
});
<!DOCTYPE html> 
 
<html ng-app="accordions"> 
 

 
<head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Accordions</title> 
 
    <link data-require="[email protected]" data-semver="3.3.7" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css" /> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 
 
    <script> 
 
    document.write('<base href="' + document.location + '" />'); 
 
    </script> 
 
    <script data-require="[email protected]" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script> 
 
    <script data-require="[email protected]" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
 
</head> 
 

 
<body ng-controller="MainCtrl"> 
 
    <div class="panel-group" id="accordion"> 
 
    <div class="panel panel-default" ng-repeat="field in fieldAccordions track by $index"> 
 
     <div class="panel-heading"> 
 
     <div class="panel-title"> 
 
      <a data-toggle="collapse" data-parent="#accordion" href="#collapse{{ $index }}"> 
 
      {{ field.fieldAccordionHeader }} </a> 
 
     </div> 
 
     </div> 
 
     <div id="collapse{{ $index }}" class="panel-collapse collapse in"> 
 
     <div class="panel-body"> 
 
      <div ng-repeat="item in field.fieldAccordionItems track by $index">{{ item.desc }}</div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

注:あなたがあなたのを提供していませんでしたので、私は、標準のブートストラップ3クラスを使ってきたそのような場合、私はこのように、内部のアコーディオンとngのリピートを置きます質問のカスタムスタイル。

+0

本当にありがとう。ご協力ありがとうございました。もう1つ質問:各ヘッダーに複数のアイテムをリストするにはどうしたらいいですか?今は1つでしか動作しません –

+0

@ClaudiuRemy - あなたは何を意味するのか分かりません。あなたの実際のシナリオを正確に反映するためにあなたのfieldAccordions配列を更新してください、そして私はあなたに答えることができます。 – jbrown

+0

fieldAccordionItem1の後にfieldAccordionItem2を追加すると、fieldAccordionHeaderの下に新しいフィールドが作成されません。 –

関連する問題