2013-05-17 13 views
5

特定のaccordion-sectionがopenendのときにアクションを実行しようとしています。私のユースケースはこのquestion hereとほとんど同じですが、ng-eachの代わりに静的に定義されたものだけを使用しています。状態変化-オープンしたときangle-ui bootstrap accordion:is-open属性を正しく見るにはどうすればよいですか?

どういうわけか私はこれが動作しない理由を誰が私を伝えることができ、火災に$ウォッチを取得することはできません。

ビュー:

<accordion close-others="false"> 
    <accordion-group heading="group1" is-open="acc1open"> 
    content 1 
    </accordion-group>  
    <accordion-group heading="group2" is-open="acc2open"> 
    content 2 
    </accordion-group> 
    </accordion> 

コントローラ:

$scope.acc1open = false; 
    $scope.acc2open = true; 

    $scope.$watch('acc1open', function(){ 
     console.log("watch acc1:" +$scope.acc1open); 
    }, true); 

はここplunkerです:

http://plnkr.co/edit/Ycms81?p=preview

ページがロードされると「watch acc1:false」が1回だけ表示されますが、アコーディオングループが開かれているときは何も表示されません。

+1

私は「これを試してみましたが、couldnそれを理解してください。 – lucuma

答えて

2

私はAccordionDemoCtrl divの内側<span>を追加している、オープン$ parent.acc1open

<accordion-group heading="group1" is-open="$parent.acc1open"> 

にバインドするために...

<span ng-click="acc1open = true">Click me to open group 1</span> 

ディレクティブは、独自のスコープを持っている、と変更変数は独自のものです。 plunkerとともに

+0

ありがとうございました!記録のためのPlunkerを更新しました:http://plnkr.co/edit/1lnbTa?p=preview –

+1

この説明は私のためにiffyだったので、私はこれをどのようにしてコメントを追加します。プランナーは私のための解決策でした。 – dacopenhagen

+0

これは実際には間違った答えです.1つの値を複数のis-openに関連付けるべきではありません。上記のプランカを見て、実際には動作していません。 – windmaomao

11

plnkr.co/edit/1lnbTa?p=preview

私は、これは配列のために働いた:

JS

$scope.array = [object1,object2,object3,object4]; 
$scope.isOpen = [false,false,false,false]; 
$scope.$watch('isOpen', function() { 
    console.log("watch isOpen:" + $scope.isOpen); 
}, true); 

HTML(JADE)

accordion-group(ng-repeat='object in array',is-open="$parent.isOpen[$index]") 
    accordion-heading 
    h4 My Heading {{$index}} 
    p My content {{$index}} 
+1

IMHO、これは受け入れられる回答でなければなりません。 GJ! – Dormouse

+1

私は同意する、少なくとも正しい方向に置く。 $ scope.isOpen = [true]を設定できます。第1のパネルは常に開いている。そして、あなたのために残りの要素を埋めるでしょう。is-open = "isOpen [$ index]" – windmaomao

+0

現在開いているパネルを見つけるには、_.indexOf($ scope.isOpen、true)アンダースコアを使用しています。 – windmaomao

関連する問題