2016-11-29 48 views
0

需要設置元素的屬性(isOpen)。當我將這個值「硬編碼」爲真或假時,它可以工作,但是當我從「測試」方法獲得值時,它會設置值和圖標的變化,但手風琴不會打開和關閉。使用Angular或Javascript設置屬性

_title = d.create('h1') 
        .setClasses(['h2', 'pull-left']) 
        .setAttributes([['id', ++number + "values"], ['ng-click', 'isOpen = test(isOpen)'], ['ng-init', 'isOpen = true']]) 
        .setInnerHTML(_titleHtml) 
        .toElement(); 

這是它調用的方法:

scope.test = function (isOpen) { 
        isOpen = !isOpen; 
        return isOpen; 
    } 

從檢查的編譯後的代碼如下:我已閱讀有關使用$應用和$編譯

Compiled html

但不知道如何使其工作。

欣賞幫助。

更新:

我包括更多的解釋來幫助你。我需要將isOpen值發送到測試方法,因爲我需要在其他地方實現其他邏輯,具體取決於isOpen在當時是true還是false。如果單擊了另一個按鈕,如果手風琴已經打開,則什麼也不做如果關閉拓展等

+0

你爲什麼初始化模板中的價值? 在scope'isOpen = true範圍內執行它,然後你不需要'ng-init'。 –

+0

您可以使用設置器更新您的值,但Angular在檢測到更改之前不會應用效果。在循環內部觀察和評估每一個變化。調用$ apply會導致循環播放,檢測到變化,然後......播放效果。 – Nico

+0

@Nico如果有人需要使用$應用程序意味着正在做的東西不完全在角度的方式! –

回答

0
_title = d.create('h1') 
    .setClasses(['h2', 'pull-left']) 
    .setAttributes([['id', ++number + "values"], ['ng-click', 'isOpen=!isOpen'], ['ng-init', 'isOpen=true']]) 
    .setInnerHTML(_titleHtml) 
    .toElement(); 

沒有必要使用方法....

+0

謝謝Nico。代碼最初就是這樣。我需要發送狀態並將其設置在方法中,因爲我想在此處未包含的方法中實現其他邏輯。 –