2012-12-05 9 views
8

मैं की तरह कुछ करने के लिए करना चाहते हैं: नियंत्रक मेंAngularJS में दोहराया तत्व आईडी कैसे सेट करें?

<div class='row' ng-repeat='row in _.range(0,12)'> 
    <div id='{{row}}'></div> 
</div> 

लेकिन जब मैं कोशिश:

function SetterForCatanCtrl($scope) { 
    $scope._ = _; 
    try { 
     var tile = document.getElementById('5'); 
     tile.style.backgroundImage = "url('aoeu.png')"; 
    } catch (e) { 
     alert(e) 
    } 
} 

getElementById रिटर्न अकृत कैसे एक तत्व की आईडी AngularJS वैरिएबल का उपयोग कर सेट किया जा सकता?

+0

आप के रूप में यह http://stackoverflow.com/questions/11873570/angularjs-for-loop-with-numbers-ranges –

+0

@ Olivier.Roger में किया जाता है कस्टम फ़िल्टर इस्तेमाल कर सकते हैं , रेंज ठीक काम करता है। यह http://stackoverflow.com/questions/13685138/how-to-repeat-elements-in-angularjs से आया था। मेरा सवाल तत्व की आईडी को सेट करने के बारे में है। ऐसा लगता है कि काम नहीं करता है। –

उत्तर

13

फ़ंक्शन SetterForCatanCtrl केवल एक बार चलाया जाता है, जब कोणीय ngController निर्देशक को आपके ऐप को बूटस्ट्रैप करते समय निर्देश देता है। जब ऐसा होता है तो आप जिस तत्व को DOM से एक्सेस करना चाहते हैं वह अभी तक मौजूद नहीं है।

एक नियंत्रक से डीओएम हेरफेर एक अच्छा अभ्यास नहीं है, निर्देश आप जिस तरह की समस्या का सामना कर रहे हैं उसे हल कर सकते हैं। आपके उपयोग के मामले को सीएसएस के साथ हल किया जा सकता है और केवल वर्गों को स्विच किया जा सकता है लेकिन मुझे लगता है कि आप केवल पृष्ठभूमि छवि सेट करने से अधिक करना चाहते हैं।

एक नियंत्रक

आप कस्टम निर्देशों के लिए पूछ नहीं हैं, इसलिए एक त्वरित समाधान ngClick निर्देशों का उपयोग किया जाता है और एक विधि है कि छवियों

स्विच कर सकते हैं

उदाहरण HTML

<div ng-controller='ctrl'> 
    <div class='row' ng-repeat='row in _.range(0,12)'> 
     <div id='{{row}}' ng-click="click($index)"> 
      <button>{{row}}</button> 
     </div> 
    </div> 
</div> 
कह सकते हैं से

डोम हेरफेर

और जे एस

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

App.run(function($rootScope) { 
    $rootScope._ = _; 
}); 

App.controller('ctrl', function($scope){ 
    $scope.click = function(idx){ 
     var elem = document.getElementById(idx); 
     console.log('clicked row', idx, elem); 
    }; 
​}); ​ 

तो जब एक बटन क्लिक किया जाता है, आपको एक आईडी मिल जाएगी और डीओएम से तत्व प्राप्त करने के लिए इसका उपयोग किया जाएगा। लेकिन मुझे दोहराने दो, इस उपयोग के मामले में निर्देश एक बेहतर विकल्प है।

JSFiddle: http://jsfiddle.net/jaimem/3Cm2Y/

पीडी: अगर आप jQuery लोड आप डोम से तत्व का चयन करने के angular.element(<selector>) उपयोग कर सकते हैं।


संपादित करें: जोड़ने के निर्देश उदाहरण

डोम एक निर्देश

एक निर्देश का प्रयोग से हेरफेर, सरल है के बाद से आप सिर्फ तत्व निर्देश

लिए आवेदन किया है करने के लिए एक घटना बाध्य कर सकते हैं एचटीएमएल

<h1>Directive</h1> 
<div class='row' ng-repeat='row in _.range(0,12)'> 
    <div id='{{row}}' my-directive> 
     <button>{{row}}</button> 
    </div> 
</div> 

जेएस

App.directive('myDirective', function(){ 
    return function(scope, element, attr){ 
     element.bind('click', function(){   
      console.log('clicked element: ', element, element.html()); 
     }); 
    }; 
}); 

http://jsfiddle.net/jaimem/3Cm2Y/1/

+0

मैं jsfiddle में आपके पास जो कुछ है उसके साथ गया था। धन्यवाद। –

+0

@jaime धन्यवाद! आपका जवाब मुझे बहुत मदद करता है! बीटीडब्ल्यू, मैं निर्देश में 'स्कोप, तत्व, attr' के दस्तावेज़ कहां मिल सकता है? और वे '$' के बिना क्यों हैं?अलग क्या है? मैं AngularJS की नौसिखिया हूँ। – zx1986

+2

@ zx1986 http://devdocs.io/angular/ng.$compileprovider#methods_directive – Martin

संबंधित मुद्दे