2013-12-18 5 views
5

मैं jQuery पृष्ठभूमि के साथ एंगुलरजेएस में नया हूं, और अभी भी कोणीय सोच में प्रवेश करने का प्रयास कर रहा हूं। मैं जैसे कई button रों है:एंगुलरजेएस पारस्परिक अनन्य तरीके से कई बटनों पर कक्षा लागू करता है

<button class="btn active">btn1</button> 
<button class="btn">btn2</button> 
... 
<button class="btn">btnN</button> 
jQuery साथ

मेरा लक्ष्य पूरा करने के लिए, कि केवल एक ही button समय पर activeclass के लिए मैं

करना होगा jQuery

$(".btn").on('click', function(){ 
$(this).siblings().removeClass('active') 
     .end() 
     .addClass('active'); 
}); 
है,

सीएसएस

.active{ ... } 

लेकिन मुझे एंगुलर में ऐसा करने के लिए सामान्य तरीका नहीं मिला। मुझे 3 बटनों का समाधान मिला, लेकिन यह अशिष्ट हो जाता है, खासकर अगर मेरे पास मेरे आवेदन में route है।

विशेष रूप से, अब समाधान मैं उपयोग कर रहा हूँ है:

मार्कअप

<li class="start" ng:click="selected = 1" ng-class="{active: selected == 1}"> 
<a href="#contenuti> </a> 
</li> 
<li class="start" ng:click="selected = 2" ng-class="{active: selected == 2}"> 
<a href="#utenti> </a> 
</li> 
<li class="start" ng:click="selected = 3" ng-class="{active: selected == 3}"> 
<a href="#messaggi> </a> 
</li> 

नियंत्रक में (बूटस्ट्रैप सेटिंग्स के लिए)

switch($location.path()){ 
case '/contenuti/plot': 
    $scope.selected = 1; 
    break; 
case '/utenti': 
    $scope.selected = 2; 
    break; 
case '/messaggi': 
    $scope.selected = 3; 
    break; 
} 

जो एक है समाधान जो मैं वास्तव में प्यार नहीं करता, मुझे नहीं लगता कि वास्तव में एक अच्छा समाधान है। मदद के लिए अग्रिम धन्यवाद।

jQuery समाधान फिडल: http://jsfiddle.net/HS4d6/

+0

AngularJS डेटा पर ही आधारित है। * आमतौर पर * आपको डोम के बारे में भूल जाना चाहिए। – zsong

उत्तर

2

के बाद से अपने सभी बटन बहुत समान होने लगते हैं, तो आप ऐसा तरह एक एनजी-दोहराने इस्तेमाल कर सकते हैं:

:

<li data-ng-repeat="button in buttons" data-ng-class="{ active: button.url == location.path() }></li> 

और फिर अपने नियंत्रक इस होगा

function myController($scope....){ 
    $scope.location = $location; 

    $scope.buttons = [ 
     { url: '/contenuti/plot' }, 
     { url: '/utenti' }, 
     { url: '/messaggi' } 
    ]; 
} 

इस तरह से अधिक बटन जोड़ना और उन्हें स्वचालित रूप से काम करना आसान होगा। स्पष्ट रूप से अपनी जरूरतों के अनुसार संशोधित करें।

2

में आपका स्वागत है कोणीय दुनिया - यह jQuery से थोड़ा अलग है। लेकिन आप इसे प्यार करेंगे!

अंगुलर में बहुत सारी चीज़ें हैं, लेकिन उनमें से रानी directive है!

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

app.directive('selectable', function(){ 

    var selected; 

    var unselect = function(element) { 
     element.removeClass('selected'); 
    } 

    var select = function(element) { 
     if (selected){ 
      unselect(selected); 
     } 
     selected = element; 
     element.addClass('selected'); 
    } 

    return { 

     link : function(scope, element, attrs){ 

      element.on('click', function(){ 
       select(element); 
      }); 

     } 
    } 
}); 

PLNKR

+0

मॉडल संचालित किया जा सकता है, आपने इसे निर्देश में ले जाया है और ऐसा कुछ किया है जो आप jquery में करेंगे, जो मुझे लगता है कि कोणीय तरीका नहीं है। बेहतर तरीका यह है कि @Mathew ने सुझाव दिया है या उपयोगकर्ता – Chandermani

+0

@ कंधर्मनी बटन सख्ती से दृश्य-दुनिया (डोम वर्ल्ड) से संबंधित है - क्या आप इसके साथ सहमत हो सकते हैं? मेरा समाधान सिर्फ एक ** मचान ** है, ** ** ** ** - इसे एक प्रेरणा के रूप में काम करना चाहिए। इसे आसानी से मॉडल संचालित करने के लिए संशोधित किया जा सकता है: ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ओपी के लिए काम करने का एक समाधान चाहता था: * विशेष रूप से यदि मेरे आवेदन में एकाधिक मार्ग है *। आप कई मार्गों पर 'ng-repeat' का उपयोग कैसे करेंगे? –

+0

@ कंधर्मनी एक और सवाल: jQuery चयनकर्ता का उपयोग क्यों करना बेहतर हो सकता है - कृपया कुछ संदर्भ प्रदान करें? –

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

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