एनजी-क्लिक का उपयोग करके कोणीयज में कक्षाएं जोड़ना और निकालना


97

मैं काम करने की कोशिश कर रहा हूं कि ngClick के साथ एक क्लास कैसे जोड़ा जाए। मैंने अपना कोड plunker पर अपलोड किया है यहां क्लिक करें । कोणीय दस्तावेज़ीकरण को देखते हुए मैं सही तरीके से यह पता नहीं लगा सकता कि यह किया जाना चाहिए। नीचे मेरे कोड का एक स्निपेट दिया गया है। क्या कोई मुझे सही दिशा में मार्गदर्शन कर सकता है

 <div ng-show="isVisible" ng-class="{'selected': $index==selectedIndex}" class="block"></div>

नियंत्रक

var app = angular.module("MyApp", []);
app.controller("subNavController", function ($scope){

        $scope.toggle = function (){
            $scope.isVisible = ! $scope.isVisible;
        };

        $scope.isVisible = false;
    });

डेमो या स्पष्ट नहीं है कि उद्देश्य क्या है। एक मेनू टॉगल करने की कोशिश कर रहा है, लेकिन क्यों आप केवल डेमो में टॉगल मेनू लिंक aare?
charlietfl

जवाबों:


110

आपको बस एक चर को "एनजी-क्लास" निर्देश में बांधने की जरूरत है और इसे नियंत्रक से बदल देना चाहिए। यह कैसे करना है इसका एक उदाहरण इस प्रकार है:

var app = angular.module("ap",[]);

app.controller("con",function($scope){
  $scope.class = "red";
  $scope.changeClass = function(){
    if ($scope.class === "red")
      $scope.class = "blue";
    else
      $scope.class = "red";
  };
});
.red{
  color:red;
}

.blue{
  color:blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="ap" ng-controller="con">
  <div ng-class="class">{{class}}</div>
  <button ng-click="changeClass()">Change Class</button>    
</body>

यहाँ उदाहरण है jsFiddle पर काम करना


29
classएक आरक्षित शब्द है, classNameइसके बजाय उपयोग करें , YUI संकलक इसे छोटा करने में विफल होगा।
ऑरलैंडो

7
यदि मैं एक ही दृश्य में एक से अधिक div के लिए इस कोड का उपयोग करना चाहता हूं तो क्या होगा? सभी कोड के लिए यह कोड वास्तविक परिवर्तन कक्षा, मैं केवल चयनित क्लिक किए गए आइटम पर कक्षा कैसे लागू कर सकता हूं
xzegga

धन्यवाद। यह समझने के लिए कि परिवर्तन क्लास बटन पर क्लिक करने पर क्या हो रहा है, कंसोल खोलें और कोड देखें।
fidev

1
इस SO थ्रेड पर भी एक नज़र डालें। 100% प्रश्न के दायरे से जुड़ा नहीं हो सकता है, लेकिन फिर भी अतिरिक्त उपयोगी जानकारी प्रदान करता है: stackoverflow.com/questions/31047094/…
BiLaL

144

मैं अपने कोड में " " क्लास को गतिशील रूप से जोड़ना या निकालना चाहता हूं , यहां मैंने क्या किया है।activeng-click

<ul ng-init="selectedTab = 'users'">
   <li ng-class="{'active':selectedTab === 'users'}" ng-click="selectedTab = 'users'"><a href="#users" >Users</a></li>
   <li ng-class="{'active':selectedTab === 'items'}" ng-click="selectedTab = 'items'"><a href="#items" >Items</a></li>
</ul>

13
-1 एनजी-इनिट के लिए। AngularJS डॉक्स के अनुसार -The only appropriate use of ngInit is for aliasing special properties of ngRepeat, as seen in the demo below. Besides this case, you should use controllers rather than ngInit to initialize values on a scope.
माइक ग्रेबोव्स्की

2
मैं सिर्फ नियंत्रक भाग "यहाँ" से बच रहा हूं, क्योंकि यह सिर्फ यह करने के लिए बुनियादी कार्यक्षमता दिखाने के लिए है ...
cutedevil086

1
आप 'एनजी-क्लास = "{' एक्टिव ': अनडूलेटेड सिंटैक्स का भी इस्तेमाल कर सकते हैं: सच} [चयनितटैब ===' यूजर्स ']" "
कोडी

मुझे समझ नहीं आता कि यह क्यों काम करेगा। मैं Angular 1.3.8 में कुछ समान कर रहा हूं और सशर्त वर्ग को एक तत्व से हटाया नहीं जाता है जब दूसरे पर क्लिक किया जाता है। मुझे लगता है क्योंकि अन्य तत्वों को फिर से प्रदान नहीं किया जाता है। फिर, यह कभी काम क्यों नहीं किया? जब किसी एक तत्व को क्लिक किया गया था तो क्या एंगुलर के पुराने संस्करणों ने पूरी सूची को फिर से बनाया था?
मैट मोलनार

मैं इसे सिर्फ इसलिए जोड़ रहा हूं क्योंकि इससे किसी और को लाइन में लगने में मदद मिल सकती है। कोणीय-यूआई-राउटर में कार्यक्षमता है जिसे आप निर्दिष्ट कर रहे हैं और बहुत कुछ। आप उन राज्यों का निर्माण करते हैं, जो एक यूरी द्वारा दर्शाए गए हैं। प्रत्येक राज्य में 1 या अधिक नियंत्रक, 1 या अधिक टेम्पलेट, और 1 या उससे अधिक दृश्य हो सकते हैं। Ui-sref निर्देश का उपयोग करके लिंक उत्पन्न किए जाते हैं। Ui-sref-सक्रिय निर्देश उस तत्व के लिए एक विशिष्ट वर्ग को बाँध देगा जब राज्य सक्रिय होगा। कोणीय यूआई-राउटर दस्तावेज़ीकरण
डेडबाइकनेक्ट

12

केवल निर्देशों के साथ ऐसा करने का एक सरल और साफ तरीका है।

<div ng-class="{'class-name': clicked}" ng-click="clicked = !clicked"></div>

8

आप यह भी कर सकते हैं कि एक निर्देश में, यदि आप पिछली कक्षा को हटाकर एक नया वर्ग जोड़ना चाहते हैं

    .directive('toggleClass', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            element.bind('click', function() {
                if(element.attr("class") == "glyphicon glyphicon-pencil") {
                    element.removeClass("glyphicon glyphicon-pencil");
                    element.addClass(attrs.toggleClass);
                } else {
                    element.removeClass("glyphicon glyphicon-ok");
                    element.addClass("glyphicon glyphicon-pencil");
                }
            });
        }
    };
});

और अपने टेम्पलेट में:

<i class="glyphicon glyphicon-pencil" toggle-class="glyphicon glyphicon-ok"></i>

आपके पास टैग और निर्देश में आइकन के नाम क्यों हैं?
राबर्ट जॉनस्टोन

वह गूंगी टिप्पणी है। यह पूरी तरह से कानूनी बात है, हालांकि मैं सहमत हूं कि यह शायद इसके लिए जगह नहीं है जब आप समझा रहे हैं कि कैसे कोणीय में कुछ करना है
बर्थ

आप ऐसा क्यों नहीं करेंगे: angular.element ('ग्लिफ़िकॉन ग्लिफ़िकॉन-पेंसिल) .removeClass (' ग्लिफ़िकॉन ग्लिफ़िकॉन-पेंसिल ')? angular.element jquery में $ का कोणीय संस्करण बहुत सुंदर है। आप बस एक सेवा या निर्देश बना सकते हैं जो इस फ़ंक्शन को कॉल करता है और निर्माणकर्ता में हटाए गएक्लास और अतिरिक्तक्लैस में पास होता है
मैट

यह सच है, लेकिन मैं सादे कोणीय js का उपयोग करने की कोशिश कर रहा था।
शिलान

7

आपके पास यह बिल्कुल सही है, आपको बस इतना करना है कि आप अपने एनजी-क्लिक में सिलेक्टेडइन्डेक्स सेट करें।

ng-click="selectedIndex = 1"

यहां बताया गया है कि मैंने कैसे बटन का एक सेट लागू किया है जो एनजी-व्यू को बदल देता है, और वर्तमान में चयनित दृश्य के बटन को हाइलाइट करता है।

<div id="sidebar" ng-init="partial = 'main'">
    <div class="routeBtn" ng-class="{selected:partial=='main'}" ng-click="router('main')"><span>Main</span></div>
    <div class="routeBtn" ng-class="{selected:partial=='view1'}" ng-click="router('view1')"><span>Resume</span></div>
    <div class="routeBtn" ng-class="{selected:partial=='view2'}" ng-click="router('view2')"><span>Code</span></div>
    <div class="routeBtn" ng-class="{selected:partial=='view3'}" ng-click="router('view3')"><span>Game</span></div>
  </div>

और यह मेरे नियंत्रक में है।

$scope.router = function(endpoint) {
    $location.path("/" + ($scope.partial = endpoint));
};


2

मैंने इसे प्राप्त करने के लिए ऊपर Zack Argyle के सुझाव का उपयोग किया, जो मुझे बहुत ही सुंदर लगता है:

सीएसएस:

.active {
    background-position: 0 -46px !important;
}

HTML:

<button ng-click="satisfaction = 'VeryHappy'" ng-class="{active:satisfaction == 'VeryHappy'}">
    <img src="images/VeryHappy.png" style="height:24px;" />
</button>
<button ng-click="satisfaction = 'Happy'" ng-class="{active:satisfaction == 'Happy'}">
    <img src="images/Happy.png" style="height:24px;" />
</button>
<button ng-click="satisfaction = 'Indifferent'" ng-class="{active:satisfaction == 'Indifferent'}">
    <img src="images/Indifferent.png" style="height:24px;" />
</button>
<button ng-click="satisfaction = 'Unhappy'" ng-class="{active:satisfaction == 'Unhappy'}">
    <img src="images/Unhappy.png" style="height:24px;" />
</button>
<button ng-click="satisfaction = 'VeryUnhappy'" ng-class="{active:satisfaction == 'VeryUnhappy'}">
    <img src="images/VeryUnhappy.png" style="height:24px;" />
</button>

2

यदि आप चिंताओं को अलग करना पसंद करते हैं जैसे कि नियंत्रक पर कक्षाएं जोड़ने और हटाने के लिए तर्क होता है, तो आप ऐसा कर सकते हैं

नियंत्रक

 (function() {
    angular.module('MyApp', []).controller('MyController', MyController);

    function MyController() {
      var vm = this;
      vm.tab = 0;

      vm.setTab = function(val) {
          vm.tab = val;
       };
      vm.toggleClass = function(val) {
          return val === vm.tab;
           };
        }
    })();

एचटीएमएल

<div ng-app="MyApp">
  <ul class="" ng-controller="MyController as myCtrl">
    <li ng-click="myCtrl.setTab(0)" ng-class="{'highlighted':myCtrl.toggleClass(0)}">One</li>
    <li ng-click="myCtrl.setTab(1)" ng-class="{'highlighted':myCtrl.toggleClass(1)}">Two</li>
    <li ng-click="myCtrl.setTab(2)" ng-class="{'highlighted':myCtrl.toggleClass(2)}">Three</li>
   <li ng-click="myCtrl.setTab(3)" ng-class="{'highlighted':myCtrl.toggleClass(3)}">Four</li>
 </ul>

सीएसएस

.highlighted {
   background-color: green;
   color: white;
}

-1

मैं विश्वास नहीं कर सकता कि हर कोई इसे कितना जटिल बना रहा है। यह वास्तव में बहुत सरल है। बस इसे अपने html में पेस्ट करें (कोई निर्देश नहीं ।/controller आवश्यक परिवर्तन - "bg-info" एक बूटस्ट्रैप क्लास है):

<div class="form-group col-md-12">
    <div ng-class="{'bg-info':     (!transport_type)}"    ng-click="transport_type=false">CARS</div>
    <div ng-class="{'bg-info': transport_type=='TRAINS'}" ng-click="transport_type='TRAINS'">TRAINS</div>
    <div ng-class="{'bg-info': transport_type=='PLANES'}" ng-click="transport_type='PLANES'">PLANES</div>
</div>

-1

प्रतिक्रियात्मक रूपों के लिए -

HTML फ़ाइल

<div class="col-sm-2">
  <button type="button"  [class]= "btn_class"  id="b1" (click)="changeMe()">{{ btn_label }}</button>
</div>

टीएस फ़ाइल

changeMe() {
  switch (this.btn_label) {
    case 'Yes ': this.btn_label = 'Custom' ;
    this.btn_class = 'btn btn-danger btn-lg btn-block';
    break;
    case 'Custom': this.btn_label = ' No ' ;
    this.btn_class = 'btn btn-success btn-lg btn-block';
    break;
    case ' No ': this.btn_label = 'Yes ';
      this.btn_class = 'btn btn-primary btn-lg btn-block';
      break;
  }

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.