2013-10-21 39 views
0

假設我寫使用數據屬性在HTML這樣的測驗:AngularJS中有一個.data方法嗎?

<p>The cow ran in front of the <input data-answer="car"></input>.</p> 
<p>Then the <input data-answer="man"></input> hit the breaks.</p> 

如何訪問AngularJS數據應答屬性?我知道如何使用.data方法在jQuery中執行此操作。 AngularJS中是否有相同的功能?我做這一切都錯了嗎?我應該只使用jQuery?

回答

1

使用指令,該指令中,你將有一個link功能:

link: function(scope, elem, attrs) { 
    console.log(attrs.answer); //manipulate as you need 
} 

角還帶有jqLit​​e,一定要檢查出執行整個JQ LIB之前。

+1

'attrs.answer'更好:'Attributes'已經規範了DOM屬性(參見[documentation](http://docs.angularjs.org/api/ng.$compile.directive.Attributes)) – Blackhole

+0

Woops ,所以它!編輯! – tymeJV

+0

tymeJV,如果你會原諒我的js noobness,那麼我將如何訪問輸入字段的內容?我會使用ng模型嗎?似乎如果我使用了ng-model,那麼我需要在每個測驗問題的範圍內都有一個單獨的變量 - 這並不好。 – Tristan

2

是的,你這樣做是錯的:P。在AngularJS中,你很少需要直接操作DOM元素。通常你只能操縱數據。

在這種情況下,您需要一個控制器來保存數據,並使用HTML來顯示它。例如:

function AnswerController($scope){ 
    $scope.doSomething = function(){ 
     //do something with $scope.man and $scope.car 
    } 
} 

<p>The cow ran in front of the <input ng-model="car" /><p> 
<p>Then the <input ng-model="man" /> the breaks.</p> 

你也可以使用<input ng-model="answers.man" />拿到1所得含所有答案對象。

請務必使用tutorial來熟悉Angular的基本概念。最重要的規則(當你開始時你必須重複自己)是:幾乎從不使用jQuery。如果你使用jQuery(你很少這樣做),那麼從來沒有從控制器使用它,但總是從一個指令。

AngularJS home page上的'JavaScript項目'示例也非常有幫助。

+0

我看到如何從標記分離數據可能是這個特定應用程序的缺點。如果測驗是一個多選題(統一格式)的列表,分離將是一個很大的優勢,尤其是使用ng-repeat函數。這個特定測驗的格式有與句子中的字段緊密相關的數據。因此每個領域都需要通過手工鏈接,這增加了一個額外的步驟。 – Tristan

+0

分離本身從來就不是(恕我直言)的一個缺點。它總是(當正確使用時)導致更清晰,更易於理解的代碼。一個更重要的問題是:應用程序是否足夠大(開發時間和/或代碼行)是否將時間投入到(爲您)的新框架中? –

+0

我已經得出結論,對於這個項目AngularJS是矯枉過正。所提出的系統並不是一個真正的Web應用程序,而是一個具有一些額外行爲功能的文檔。通過這種方式,我認爲jQuery範例非常適合。謝謝你的幫助。 – Tristan

相關問題