একটি বর্তমান মেনু আইটেম হাইলাইট কিভাবে?


205

অ্যাঙ্গুলারজেএস কি activeবর্তমান পৃষ্ঠার লিঙ্কটিতে কোনও শ্রেণি নির্ধারণে সহায়তা করে?

আমি ভাবলাম এটি করার জন্য কিছু জাদুকরী উপায় রয়েছে তবে আমি এটির সন্ধান করতে পারছি না।

আমার মেনুটি দেখতে দেখতে:

 <ul>
   <li><a class="active" href="/tasks">Tasks</a>
   <li><a href="/actions">Tasks</a>
 </ul>

এবং আমার পথে আমার প্রত্যেকের জন্য নিয়ামক রয়েছে: TasksControllerএবং ActionsController

তবে আমি aকন্ট্রোলারগুলির লিঙ্কগুলিতে "সক্রিয়" শ্রেণিকে আবদ্ধ করার কোনও উপায় বের করতে পারি না ।

কোন ইঙ্গিত?

উত্তর:


265

দেখুন

<a ng-class="getClass('/tasks')" href="/tasks">Tasks</a>

নিয়ামক উপর

$scope.getClass = function (path) {
  return ($location.path().substr(0, path.length) === path) ? 'active' : '';
}

এটির সাথে টাস্ক লিঙ্কটিতে '/ টাস্ক' দিয়ে শুরু হওয়া যে কোনও ইউআরএলগুলিতে সক্রিয় শ্রেণি থাকবে (যেমন '/ টাস্ক / 1 / রিপোর্ট')


4
এটি "/" এবং "/ কিছু" উভয়ের সাথেই মিলবে বা যদি আপনার অনুরূপ url এর সাথে একাধিক মেনু আইটেম থাকে যেমন "/ পরীক্ষা", "/ পরীক্ষা / এটি", "/ পরীক্ষা / এই / পথ" থাকে / পরীক্ষা, এটি options বিকল্পগুলির সমস্ত হাইলাইট করবে।
বেন লেশ

3
আমি এটিকে যদি ($ লোকেশন.পাথ () == পাথ) এবং y পথটি "/ ব্লাহ" ইত্যাদি হিসাবে পরিবর্তন করেছি
টিম

113
আমি স্বরলিপিটি পছন্দ করি ngClass="{active: isActive('/tasks')}, যেখানে isActive()কন্ট্রোলার এবং মার্কআপ / স্টাইলিংটিকে ডুপ্লুপ করার সাথে সাথে কোনও বুলিয়ান ফিরে আসবে।
এড হিঙ্কলিফ

6
যে কোনও ক্ষেত্রে কোডটি "/" হলে দ্বিগুণ না হওয়ার বিষয়ে ভাবছিলেন, এটি হ'ল (ফর্ম্যাটিংয়ের জন্য দুঃখিত): $ স্কোপ.জেটক্লাস = ফাংশন (পাথ) {যদি ($ লোকেশন.পাথ ()। substr (0, path.length) == path) {if (path == "/" && $ location.path () == "/") {"সক্রিয়"; } অন্যথায় যদি (পথ == "/") {ফেরত ""; } "সক্রিয়"} অন্যথায় {ফিরে ""}}

1
এডহিনচ্লিফ ইতিমধ্যে চিহ্নিত করেছে যে এটি মার্কআপ এবং যুক্তি মিশ্রিত করে। এটি পথটির সদৃশ হয়ে যায় এবং এরপরে অনুলিপি এবং অনুলিপি করতে পারে। আমি খুঁজে পেয়েছি যে @kfis দ্বারা পরিচালিত দিকনির্দেশনাটি যদিও আরও বেশি লাইন, আবার পুনরায় ব্যবহারযোগ্য এবং মার্কআপ ক্লিনার রাখে।
এ মারে

86

আমি কোনও লিঙ্কে একটি ডিরেক্টরি ব্যবহার করার পরামর্শ দিচ্ছি।

তবে এটি এখনও নিখুঁত নয়। হ্যাশব্যাংগুলির জন্য নজর রাখুন;)

নির্দেশের জন্য জাভাস্ক্রিপ্ট এখানে:

angular.module('link', []).
  directive('activeLink', ['$location', function (location) {
    return {
      restrict: 'A',
      link: function(scope, element, attrs, controller) {
        var clazz = attrs.activeLink;
        var path = attrs.href;
        path = path.substring(1); //hack because path does not return including hashbang
        scope.location = location;
        scope.$watch('location.path()', function (newPath) {
          if (path === newPath) {
            element.addClass(clazz);
          } else {
            element.removeClass(clazz);
          }
        });
      }
    };
  }]);

এবং এটি এইচটিএমএলে কীভাবে ব্যবহৃত হবে তা এখানে:

<div ng-app="link">
  <a href="#/one" active-link="active">One</a>
  <a href="#/two" active-link="active">One</a>
  <a href="#" active-link="active">home</a>
</div>

এরপরে CSS সহ স্টাইলিং:

.active { color: red; }

"হ্যাশব্যাংসের জন্য নজর রাখুন" বলতে কী বোঝাতে চাইছেন তা আমি নিশ্চিত নই। মনে হয় এটি সবসময় কাজ করবে। আপনি একটি পাল্টা উদাহরণ প্রদান করতে পারেন?
অ্যান্ড্রি দ্রোজডিয়ুক

7
আপনি যদি বুটস্ট্র্যাপ ব্যবহার করার চেষ্টা করছেন এবং কোনও লি'র মধ্যে একটি এর এর হ্যাশের উপর ভিত্তি করে সেট করার দরকার পড়ে, তবে ব্যবহার করুন var path = $(element).children("a")[0].hash.substring(1);। এটি এমন স্টাইলের জন্য কাজ করবে<li active-link="active"><a href="#/dashboard">Dashboard</a></li>
ডেভ

2
আমি scope.$watch('location.path()', function(newPath) {জন্য পরিবর্তন হবে scope.$on('$locationChangeStart', function(){
সানফিলিপোপাব্লো

2
আপনি NG-সূরা ব্যবহার করেন, তাহলে শুধু পরিবর্তন করুন: var path = attrs.href; থেকে var path = attrs.href||attrs.ngHref;
উইলিয়াম Neely

আপনি সক্রিয় বর্গ করা বুটস্ট্র্যাপ এবং প্রয়োজন ব্যবহার করেন তাহলে <li>, আপনি পরিবর্তন করতে পারেন element.addClass(clazz);থেকেelement.parent().addClass(clazz);
JamesRLamar

47

এখানে একটি সাধারণ পদ্ধতির যা কৌণিকর সাথে ভালভাবে কাজ করে।

<ul>
    <li ng-class="{ active: isActive('/View1') }"><a href="#/View1">View 1</a></li>
    <li ng-class="{ active: isActive('/View2') }"><a href="#/View2">View 2</a></li>
    <li ng-class="{ active: isActive('/View3') }"><a href="#/View3">View 3</a></li>
</ul>

আপনার AngularJS নিয়ামকের মধ্যে:

$scope.isActive = function (viewLocation) {
     var active = (viewLocation === $location.path());
     return active;
};

এই থ্রেডে আরও অনেক অনুরূপ উত্তর রয়েছে।

অ্যাঙ্গুলার জেএস সহ বুটস্ট্র্যাপ নববার সক্রিয় ক্লাসটি কীভাবে সেট করবেন?


1
পরিবর্তনশীল এটি অপ্রয়োজনীয় হ'ল সরান। কেবল তুলনার ফলাফলটি ফিরিয়ে দিন। return viewLocation === $location.path()
আফরাজিত

33

বিতর্কটিতে কেবলমাত্র আমার দুটি সেন্ট যুক্ত করার জন্য আমি খাঁটি কৌণিক মডিউল তৈরি করেছি (কোনও জকিউয়ারি নেই), এবং এটি ডেটাযুক্ত হ্যাশ url নিয়েও কাজ করবে। (যেমন #/this/is/path?this=is&some=data)

আপনি কেবল মডিউলটিকে নির্ভরতা হিসাবে এবং auto-activeমেনুর পূর্বপুরুষদের মধ্যে একটিতে যুক্ত করুন। এটার মত:

<ul auto-active>
    <li><a href="#/">main</a></li>
    <li><a href="#/first">first</a></li>
    <li><a href="#/second">second</a></li>
    <li><a href="#/third">third</a></li>
</ul>

এবং মডিউলটি এর মতো দেখতে:

(function () {
    angular.module('autoActive', [])
        .directive('autoActive', ['$location', function ($location) {
        return {
            restrict: 'A',
            scope: false,
            link: function (scope, element) {
                function setActive() {
                    var path = $location.path();
                    if (path) {
                        angular.forEach(element.find('li'), function (li) {
                            var anchor = li.querySelector('a');
                            if (anchor.href.match('#' + path + '(?=\\?|$)')) {
                                angular.element(li).addClass('active');
                            } else {
                                angular.element(li).removeClass('active');
                            }
                        });
                    }
                }

                setActive();

                scope.$on('$locationChangeSuccess', setActive);
            }
        }
    }]);
}());

(আপনি অবশ্যই কেবল নির্দেশের অংশটি ব্যবহার করতে পারেন)

এছাড়া মূল্য ঠাহর যে এই খালি হ্যাশ (যেমন জন্য কাজ করে না এর example.com/#বা শুধু example.com) এটিকে কমপক্ষে থাকতে হবে example.com/#/বা শুধু example.com#/। তবে এটি এনজিআরসোর্স এবং এর মতই স্বয়ংক্রিয়ভাবে ঘটে।

এবং এখানে হৈচৈ হয়: http://jsfiddle.net/gy2an/8/


1
দুর্দান্ত সমাধান, তবে এটি অ্যাপলিকেশন চলাকালীন ঠিক পজিশনের পরিবর্তে প্রাথমিক পৃষ্ঠার লোডে কাজ করে না। আমি এটি পরিচালনা করতে আপনার স্নিপেট আপডেট করেছি ।
জেরি

@ জারেক: ধন্যবাদ! আপনার পরিবর্তনগুলি কার্যকর করেছে। আমার ব্যক্তিগতভাবে এটি নিয়ে সমস্যা হয়নি, তবে আপনার সমাধানটি তাদের জন্য ভাল স্থিতিশীল সমাধান বলে মনে হচ্ছে যারা এই সমস্যায় পড়ে should
পাইলিনাক্স

2
অন্য কারও যদি ভাল ধারণা থাকে তবে আমি এখন টানা অনুরোধগুলির জন্য একটি গিথুব রেপো তৈরি করেছি: github.com/
কার্ল-

আমি ঠিক আরও কয়েকটি বাগ স্থির করেছি যা আপনি এনজি- হেরেফ
ব্লেক নিম্মিজস্কি

এই স্ক্রিপ্টটি আপনাকে কোনও পথ নির্দিষ্ট করার অনুমতি দিলে এটির অন্যান্য উপাদানগুলি সক্রিয় করতে পারে।
ব্লেক নিমাইজস্কি

22

আমার ক্ষেত্রে আমি নেভিগেশনের জন্য দায়ী একটি সাধারণ নিয়ামক তৈরি করে এই সমস্যার সমাধান করেছি

angular.module('DemoApp')
  .controller('NavigationCtrl', ['$scope', '$location', function ($scope, $location) {
    $scope.isCurrentPath = function (path) {
      return $location.path() == path;
    };
  }]);

এবং এই জাতীয় উপাদানগুলিতে কেবল এনজি-ক্লাস যুক্ত করে:

<ul class="nav" ng-controller="NavigationCtrl">
  <li ng-class="{ active: isCurrentPath('/') }"><a href="#/">Home</a></li>
  <li ng-class="{ active: isCurrentPath('/about') }"><a href="#/about">About</a></li>
  <li ng-class="{ active: isCurrentPath('/contact') }"><a href="#/contact">Contact</a></li>
</ul>

14

জন্য AngularUI রাউটার ব্যবহারকারী:

<a ui-sref-active="active" ui-sref="app">

এবং এটি activeনির্বাচিত বস্তুর উপর একটি শ্রেণি স্থাপন করবে।


2
এটি একটি ইউআই-রাউটারের নির্দেশ এবং এটি যদি আপনি অন্তর্নির্মিত রাউটার, ওরফে এনজিআরটে ব্যবহার করেন তবে এটি কাজ করে না। এটি বলেছিল, ইউআই-রাউটার দুর্দান্ত।
moljac024

সম্মত হন, আমি মূলত এটি উল্লেখ করতে ভুলে গেছি যে এটি কেবলমাত্র ইউআই-রাউটার সমাধান ছিল।
frankie4fingers 14

13

একটি ng-classনির্দেশ রয়েছে, যা ভেরিয়েবল এবং সিএসএস শ্রেণিকে আবদ্ধ করে। এটি বস্তুটিকেও গ্রহণ করে (ক্লাসেরনেম বনাম বুলি মূল্য জোড়া)।

এখানে উদাহরণ, http://plnkr.co/edit/SWZAqj


ধন্যবাদ, তবে এটি এই জাতীয় পথগুলির সাথে কাজ করবে না: /test1/blahblahবা এটি করবে?
অ্যান্ড্রি দ্রোজডিয়ুক

সুতরাং আপনি কি বলছেন যে active: activePath=='/test1'প্রদত্ত স্ট্রিং দিয়ে পথটি শুরু হয় স্বয়ংক্রিয়ভাবে "সক্রিয়"? এটি কি কোনও ধরণের পূর্বনির্ধারিত অপারেটর বা রেজেক্স?
অ্যান্ড্রি দ্রোজডিয়ুক

দুঃখিত, আমি মনে করি না যে আমি আপনার প্রয়োজনীয়তাটি সঠিকভাবে বুঝতে পেরেছি। এখানে আমার নতুন অনুমান, আপনি 'টেস্ট 1' লিংক এবং 'টেস্ট 1 / ব্লহব্লাহ' লিঙ্কটি হাইলাইট করতে চাইলে রুটটি যখন 'টেস্ট 1 / ব্লাহব্লাহ' হয় তখন উভয়ই চাই। "আমি কি সঠিক? যদি এটি প্রয়োজন হয় তবে আপনি ঠিক বলেছেন যে আমার সমাধান না কাজ করুন
তোশ

3
এখানে আপডেট করা plnkr: plnkr.co/edit/JI5DtK (যা অনুমান করা প্রয়োজনটি পূরণ করে) কেবলমাত্র একটি বিকল্প সমাধান দেখানোর জন্য।
তোশ

আমি আপনি কি কি আছে দেখতে। তবে আমি ==এইচটিএমএল-এ বারবার চেক করার ভক্ত নই ।
অ্যান্ড্রি দ্রোজডিয়ুক

13

উত্তর @ Renan-তমাল-Fernandes থেকে ভাল, কিন্তু সঠিকভাবে কাজ করার উন্নতি দুয়েক প্রয়োজন ছিল। যেমনটি ছিল, এটি সর্বদা হোম পৃষ্ঠার লিঙ্কটি (/) ট্রিগারযুক্ত হিসাবে সনাক্ত করবে, এমনকি আপনি অন্য বিভাগে থাকলেও।

সুতরাং আমি এটি কিছুটা উন্নত করেছি, এখানে কোড's আমি বুটস্ট্র্যাপের সাথে কাজ করি যাতে সক্রিয় অংশটি এর <li>পরিবর্তে উপাদানটিতে থাকে <a>

নিয়ামক

$scope.getClass = function(path) {
    var cur_path = $location.path().substr(0, path.length);
    if (cur_path == path) {
        if($location.path().substr(0).length > 1 && path.length == 1 )
            return "";
        else
            return "active";
    } else {
        return "";
    }
}

টেমপ্লেট

<div class="nav-collapse collapse">
  <ul class="nav">
    <li ng-class="getClass('/')"><a href="#/">Home</a></li>
    <li ng-class="getClass('/contents/')"><a href="#/contests/">Contents</a></li>
    <li ng-class="getClass('/data/')"><a href="#/data/">Your data</a></li>
  </ul>
</div>

10

উপরের চমৎকার কিছু পরামর্শ পড়ার পরে আমি যে সমাধানটি নিয়ে এসেছি তা এখানে। আমার বিশেষ পরিস্থিতিতে আমি বুটস্ট্র্যাপ ট্যাব উপাদানগুলিকে আমার মেনু হিসাবে ব্যবহার করার চেষ্টা করছিলাম তবে আমি এর কৌনিক-ইউআই সংস্করণটি ব্যবহার করতে চাইনি কারণ আমি ট্যাবগুলিকে মেনু হিসাবে কাজ করতে চাই, যেখানে প্রতিটি ট্যাব বুকমার্ক সক্ষম, ট্যাবগুলির পরিবর্তে একটি পৃষ্ঠার নেভিগেশন হিসাবে কাজ করে acting ( Http://angular-ui.github.io/bootstrap/#/tabs দেখুন বুটস্ট্র্যাপ ট্যাবগুলির অ্যাঙ্গুলার-ইউআই সংস্করণটি দেখতে কেমন তা আগ্রহী হলে )।

এটিকে পরিচালনা করার জন্য আপনার নিজস্ব নির্দেশিকা তৈরি করার বিষয়ে আমি Kfis এর উত্তরটি সত্যিই পছন্দ করেছি, তবে এটির প্রতিটি নির্দেশসূত্রের লিঙ্কে রাখার প্রয়োজন এমন একটি নির্দেশনা পাওয়া ভারী মনে হয়েছিল। সুতরাং আমি আমার নিজস্ব কৌণিক নির্দেশিকা তৈরি করেছি যা পরিবর্তে একবারে স্থাপন করা হয়েছেul । অন্য যে কেউ একই কাজ করার চেষ্টা করছে সে ক্ষেত্রে, আমি ভেবেছিলাম আমি এটি এখানে পোস্ট করব, যদিও আমি যেমন বলেছি, উপরের সমাধানগুলির অনেকগুলি কাজ করে। এটি জাভাস্ক্রিপ্ট যতদূর যায় সামান্য জটিল সমাধান, তবে এটি ন্যূনতম মার্কআপ সহ একটি পুনরায় ব্যবহারযোগ্য উপাদান তৈরি করে।

নির্দেশের জন্য জাভাস্ক্রিপ্ট এবং রুট সরবরাহকারীর জন্য এখানে ng:view:

var app = angular.module('plunker', ['ui.bootstrap']).
  config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/One', {templateUrl: 'one.html'}).
        when('/Two', {templateUrl: 'two.html'}).
        when('/Three', {templateUrl: 'three.html'}).
        otherwise({redirectTo: '/One'});
  }]).
  directive('navTabs', ['$location', function(location) {
    return {
        restrict: 'A',
        link: function(scope, element) {
            var $ul = $(element);
            $ul.addClass("nav nav-tabs");

            var $tabs = $ul.children();
            var tabMap = {};
            $tabs.each(function() {
              var $li = $(this);
              //Substring 1 to remove the # at the beginning (because location.path() below does not return the #)
              tabMap[$li.find('a').attr('href').substring(1)] = $li;
            });

            scope.location = location;
            scope.$watch('location.path()', function(newPath) {
                $tabs.removeClass("active");
                tabMap[newPath].addClass("active");
            });
        }

    };

 }]);

তারপরে আপনার এইচটিএমএলে আপনি কেবল:

<ul nav-tabs>
  <li><a href="#/One">One</a></li>
  <li><a href="#/Two">Two</a></li>
  <li><a href="#/Three">Three</a></li>
</ul>
<ng:view><!-- Content will appear here --></ng:view>

এটির জন্য উত্সাহদানকারী এখানে: http://plnkr.co/edit/xwGtGqrT7kWoCKnGDHYN?p= পূর্বরূপ দেখুন ।


9

আপনি এটি খুব সহজভাবে বাস্তবায়ন করতে পারেন, এখানে একটি উদাহরণ:

<div ng-controller="MenuCtrl">
  <ul class="menu">
    <li ng-class="menuClass('home')"><a href="#home">Page1</a></li>
    <li ng-class="menuClass('about')"><a href="#about">Page2</a></li>
  </ul>

</div>

এবং আপনার নিয়ামকটি এটি হওয়া উচিত:

app.controller("MenuCtrl", function($scope, $location) {
  $scope.menuClass = function(page) {
    var current = $location.path().substring(1);
    return page === current ? "active" : "";
  };
});

5

কৌণিক-ইউআই-রাউটারের ইউআই-সেরেফ-সক্রিয় নির্দেশিকা ব্যবহার করুন https://github.com/angular-ui/ui-router/wiki/Quick- রেফারেন্স# স্টেটনেম

<ul>
  <li ui-sref-active="active" class="item">
    <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
  </li>
  <!-- ... -->
</ul>


4

কন্ট্রোলরের সুযোগের বাইরে থাকা মেনুতে আমার একই সমস্যা ছিল । এটি সেরা সমাধান বা প্রস্তাবিত সমাধান কিনা তা নিশ্চিত নন তবে এটিই আমার পক্ষে কাজ করেছে। আমি আমার অ্যাপ্লিকেশন কনফিগারেশনে নিম্নলিখিতগুলি যুক্ত করেছি:

var app = angular.module('myApp');

app.run(function($rootScope, $location){
  $rootScope.menuActive = function(url, exactMatch){
    if (exactMatch){
      return $location.path() == url;
    }
    else {
      return $location.path().indexOf(url) == 0;
    }
  }
});

তারপরে আমার কাছে দেখুন:

<li><a href="/" ng-class="{true: 'active'}[menuActive('/', true)]">Home</a></li>
<li><a href="/register" ng-class="{true: 'active'}[menuActive('/register')]">
<li>...</li>

উম ... এটি গ্রহণযোগ্য উত্তর যে আরও জটিল বলে মনে হচ্ছে। আপনি কি এই এক এর সুবিধা বর্ণনা করতে পারেন?
অ্যান্ড্রি দ্রোজডিয়ুক

1
আপনার মেনুটি এনজি-ভিউয়ের বাইরে থাকলে দৃশ্যে এটির প্রয়োজন হবে। দেখুন নিয়ামক এর বাইরে যে কোনও কিছুতে অ্যাক্সেস পাবেন না তাই আমি যোগাযোগ সক্ষম করতে $ রুটস্কোপ ব্যবহার করেছি। যদি আপনার মেনুটি এনজি-ভিউয়ের ভিতরে থাকে তবে এই সমাধানটি ব্যবহার করে আপনার কোনও লাভ হবে না।
মিঃ মিঃ

4

বুটস্ট্র্যাপ ৪.১ সহ কৌনিক সংস্করণ Using ব্যবহার করা

আমি নীচের মত দেখতে এটি সম্পন্ন করতে সক্ষম ছিল।

নীচের উদাহরণে, ইউআরএল '/ পরিচিতি' দেখলে বুটস্ট্র্যাপ সক্রিয় হয়ে html ট্যাগে যুক্ত হয়। ইউআরএল পরিবর্তন হলে এটি সরানো হয়।

<ul>
<li class="nav-item" routerLink="/contact" routerLinkActive="active">
    <a class="nav-link" href="/contact">Contact</a>
</li>
</ul>

এই নির্দেশিকাটি আপনাকে লিঙ্কের রুটটি সক্রিয় হয়ে যাওয়ার সাথে সাথে একটি উপাদানে একটি সিএসএস শ্রেণি যুক্ত করতে দেয়।

কৌণিক ওয়েবসাইটে আরও পড়ুন


3

একটি নির্দেশিকা ব্যবহার করে (যেহেতু আমরা এখানে ডোম ম্যানিপুলেশন করছি) নীচের জিনিসগুলি সম্ভবত "কৌণিক উপায়" করার নিকটতম:

$scope.timeFilters = [
  {'value':3600,'label':'1 hour'},
  {'value':10800,'label':'3 hours'},
  {'value':21600,'label':'6 hours'},
  {'value':43200,'label':'12 hours'},
  {'value':86400,'label':'24 hours'},
  {'value':604800,'label':'1 week'}
]

angular.module('whatever', []).directive('filter',function(){
return{
    restrict: 'A',
    template: '<li ng-repeat="time in timeFilters" class="filterItem"><a ng-click="changeTimeFilter(time)">{{time.label}}</a></li>',
    link: function linkFn(scope, lElement, attrs){

        var menuContext = attrs.filter;

        scope.changeTimeFilter = function(newTime){
          scope.selectedtimefilter = newTime;

        }

        lElement.bind('click', function(cevent){
            var currentSelection = angular.element(cevent.srcElement).parent();
            var previousSelection = scope[menuContext];

            if(previousSelection !== currentSelection){
                if(previousSelection){
                    angular.element(previousSelection).removeClass('active')
                }
                scope[menuContext] = currentSelection;

                scope.$apply(function(){
                    currentSelection.addClass('active');
                })
            }
        })
    }
}
})

তাহলে আপনার এইচটিএমএল দেখতে হবে:

<ul class="dropdown-menu" filter="times"></ul>

মজাদার. তবে menu-itemপ্রতিটি লাইনে অপ্রয়োজনীয় মনে হচ্ছে। সম্ভবত ulউপাদান (যেমন <ul menu>) এর সাথে কোনও বৈশিষ্ট্য সংযুক্ত করা ভাল হবে তবে আমি নিশ্চিত নই যে এটি সম্ভব হবে কিনা।
Andriy Drozdyuk

একটি নতুন সংস্করণ দিয়ে সবেমাত্র আপডেট হয়েছে - স্ট্যাটিক আনর্ডারড তালিকার পরিবর্তে, এখন আমি বুস্ট্র্যাপ ড্রপডাউন-মেনুটি একটি নির্বাচনী তালিকা হিসাবে ব্যবহার করছি।
ওয়েসলি হেলস

এটি বেশিরভাগ ইডিয়োম্যাটিক কৌণিক বলে মনে হয়। এটি স্ট্যাকওভারফ্লো.কম / সেকশনস / 14994391 /… এ দেওয়া পরামর্শের সাথে খাপ খায় এবং এটি ভিউ, হ্রেফ এবং এনজি-ক্লাসে পথটির নকল করা এড়ানো যায়।
অর্থায়ন করুন

2

আমি এটি এর মতো করেছিলাম:

var myApp = angular.module('myApp', ['ngRoute']);

myApp.directive('trackActive', function($location) {
    function link(scope, element, attrs){
        scope.$watch(function() {
            return $location.path();
        }, function(){
            var links = element.find('a');
            links.removeClass('active');
            angular.forEach(links, function(value){
                var a = angular.element(value);
                if (a.attr('href') == '#' + $location.path() ){
                    a.addClass('active');
                }
            });
        });
    }
    return {link: link};
});

এটি আপনাকে ট্র্যাক-অ্যাক্টিভ দিকনির্দেশনা সহ এমন একটি বিভাগে লিঙ্ক রাখতে সক্ষম করে:

<nav track-active>
     <a href="#/">Page 1</a>
     <a href="#/page2">Page 2</a>
     <a href="#/page3">Page 3</a>
</nav>

এই পদ্ধতির বিষয়টি আমার কাছে অন্যের চেয়ে অনেক বেশি পরিস্কার মনে হয়।

এছাড়াও, আপনি যদি jQuery ব্যবহার করে থাকেন তবে আপনি এটিকে অনেক বেশি সুন্দর করে তুলতে পারেন কারণ jQlite এর কেবলমাত্র বেসিক নির্বাচক সমর্থন রয়েছে। কৌণিক অন্তর্ভুক্ত করার আগে jquery সহ অনেকগুলি ক্লিনার সংস্করণ এর মতো দেখাবে:

myApp.directive('trackActive', function($location) {
    function link(scope, element, attrs){
        scope.$watch(function() {
            return $location.path();
        }, function(){
            element.find('a').removeClass('active').find('[href="#'+$location.path()+'"]').addClass('active');
        });
    }
    return {link: link};
});

এখানে একটি জেএসফিডাল


2

এই সমস্যার আমার সমাধান, route.currentকৌনিক টেম্পলেট ব্যবহার করুন ।

/tasksআপনার মেনুতে হাইলাইট করার রুট হিসাবে আপনার নিজের menuItemমডিউল দ্বারা ঘোষিত রুটে নিজের সম্পত্তি যুক্ত করতে পারেন :

$routeProvider.
  when('/tasks', {
    menuItem: 'TASKS',
    templateUrl: 'my-templates/tasks.html',
    controller: 'TasksController'
  );

তারপরে আপনার টেমপ্লেটে tasks.htmlআপনি নিম্নলিখিত ng-classনির্দেশাবলী ব্যবহার করতে পারেন :

<a href="app.html#/tasks" 
    ng-class="{active : route.current.menuItem === 'TASKS'}">Tasks</a>

আমার মতে, এটি প্রস্তাবিত সমস্ত সমাধানের তুলনায় অনেক পরিষ্কার।


1

কেএফআইএসের নির্দেশের একটি এক্সটেনশান যা আমি বিভিন্ন স্তরের পথের মিলের জন্য অনুমতি দিয়েছিলাম। মূলত আমি একটি নির্দিষ্ট গভীরতা পর্যন্ত ইউআরএল পাথের সাথে মিলের প্রয়োজনীয়তা খুঁজে পেয়েছি কারণ সঠিক মিলটি নেস্টিং এবং ডিফল্ট রাজ্য পুনঃনির্দেশগুলির জন্য মঞ্জুরি দেয় না। আশাকরি এটা সাহায্য করবে.

    .directive('selectedLink', ['$location', function(location) {
    return {
        restrict: 'A',
        scope:{
            selectedLink : '='
            },
        link: function(scope, element, attrs, controller) {
            var level = scope.selectedLink;
            var path = attrs.href;
            path = path.substring(1); //hack because path does not return including hashbang
            scope.location = location;
            scope.$watch('location.path()', function(newPath) {
                var i=0;
                p = path.split('/');
                n = newPath.split('/');
                for( i ; i < p.length; i++) { 
                    if( p[i] == 'undefined' || n[i] == 'undefined' || (p[i] != n[i]) ) break;
                    }

                if ( (i-1) >= level) {
                    element.addClass("selected");
                    } 
                else {
                    element.removeClass("selected");
                    }
                });
            }

        };
    }]);

এবং এখানে আমি লিঙ্কটি কীভাবে ব্যবহার করব

<nav>
    <a href="#/info/project/list"  selected-link="2">Project</a>
    <a href="#/info/company/list" selected-link="2">Company</a>
    <a href="#/info/person/list"  selected-link="2">Person</a>
</nav>

এই নির্দেশিকাটি নির্দেশের জন্য বৈশিষ্ট্যটির মানটিতে নির্দিষ্ট করা গভীরতার স্তরের সাথে মিলবে match কেবলমাত্র এটি অন্য কোথাও ব্যবহার করা যেতে পারে times


1

সক্রিয় লিঙ্কগুলি হাইলাইট করার জন্য এখানে আরও একটি নির্দেশিকা রয়েছে।

মুখ্য সুবিধা:

  • গতিশীল কৌণিক এক্সপ্রেশন ধারণ করে href সঙ্গে সূক্ষ্ম কাজ করে
  • হ্যাশ-ব্যাং নেভিগেশনের সাথে সামঞ্জস্যপূর্ণ
  • বুটস্ট্র্যাপের সাথে সামঞ্জস্যপূর্ণ যেখানে সক্রিয় শ্রেণিটি লিঙ্কটি নয়, প্যারেন্ট লি-তে প্রয়োগ করা উচিত
  • কোনও নেস্টেড পথ সক্রিয় থাকলে লিঙ্কটিকে সক্রিয় করার অনুমতি দেয়
  • সক্রিয় না থাকলে লিঙ্কটিকে অক্ষম করে

কোড:

.directive('activeLink', ['$location', 
function($location) {
    return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
            var path = attrs.activeLink ? 'activeLink' : 'href';
            var target = angular.isDefined(attrs.activeLinkParent) ? elem.parent() : elem;
            var disabled = angular.isDefined(attrs.activeLinkDisabled) ? true : false;
            var nested = angular.isDefined(attrs.activeLinkNested) ? true : false;

            function inPath(needle, haystack) {
                var current = (haystack == needle);
                if (nested) {
                    current |= (haystack.indexOf(needle + '/') == 0);
                }

                return current;
            }

            function toggleClass(linkPath, locationPath) {
                // remove hash prefix and trailing slashes
                linkPath = linkPath ? linkPath.replace(/^#!/, '').replace(/\/+$/, '') : '';
                locationPath = locationPath.replace(/\/+$/, '');

                if (linkPath && inPath(linkPath, locationPath)) {
                    target.addClass('active');
                    if (disabled) {
                        target.removeClass('disabled');
                    }
                } else {
                    target.removeClass('active');
                    if (disabled) {
                        target.addClass('disabled');
                    }
                }
            }

            // watch if attribute value changes / evaluated
            attrs.$observe(path, function(linkPath) {
                toggleClass(linkPath, $location.path());
            });

            // watch if location changes
            scope.$watch(
                function() {
                    return $location.path(); 
                }, 
                function(newPath) {
                    toggleClass(attrs[path], newPath);
                }
            );
        }
    };
}
]);

ব্যবহার:

কৌণিক অভিব্যক্তি সহ সাধারণ উদাহরণ, বলুন $ সুযোগ.var = 2 , তারপরে অবস্থানটি / url / 2 হলে লিঙ্কটি সক্রিয় থাকবে :

<a href="#!/url/{{var}}" active-link>

বুটস্ট্র্যাপ উদাহরণস্বরূপ, প্যারেন্ট লি সক্রিয় ক্লাস পাবেন:

<li>
    <a href="#!/url" active-link active-link-parent>
</li>

নেস্টেড url সহ উদাহরণ, লিঙ্কটি সক্রিয় থাকবে যদি কোনও নেস্টেড url সক্রিয় থাকে (যেমন / url / 1 , / url / 2 , url / 1/2 / ... )

<a href="#!/url" active-link active-link-nested>

জটিল উদাহরণ, একটি url ( / url1 ) এ লিঙ্ক পয়েন্ট তবে অন্যটি নির্বাচিত ( / url2 ) হলে সক্রিয় হবে :

<a href="#!/url1" active-link="#!/url2" active-link-nested>

অক্ষম লিঙ্ক সহ উদাহরণ, এটি সক্রিয় না হলে এটিতে 'অক্ষম' শ্রেণি থাকবে:

<a href="#!/url" active-link active-link-disabled>

সমস্ত সক্রিয়-লিঙ্ক- * বৈশিষ্ট্যগুলি যে কোনও সংমিশ্রণে ব্যবহার করা যেতে পারে, তাই খুব জটিল শর্তগুলি কার্যকর করা যেতে পারে।


1

আপনি যদি প্রতিটি স্বতন্ত্র লিঙ্কটি বাটারংয়ের ক্ষেত্রটি দেখার পক্ষে আরও সহজ করে তোলে তার পরিবর্তে কোনও মোড়কের দিকনির্দেশের জন্য লিঙ্কগুলি চান, তবে এটি খুব ভালভাবে কাজ করে:

  angular.module("app").directive("navigation", [
    "$location", function($location) {
      return {
        restrict: 'A',
        scope: {},
        link: function(scope, element) {
          var classSelected, navLinks;

          scope.location = $location;

          classSelected = 'selected';

          navLinks = element.find('a');

          scope.$watch('location.path()', function(newPath) {
            var el;
            el = navLinks.filter('[href="' + newPath + '"]');

            navLinks.not(el).closest('li').removeClass(classSelected);
            return el.closest('li').addClass(classSelected);
          });
        }
      };
    }
  ]);

মার্কআপ কেবল হবে:

    <nav role="navigation" data-navigation>
        <ul>
            <li><a href="/messages">Messages</a></li>
            <li><a href="/help">Help</a></li>
            <li><a href="/details">Details</a></li>
        </ul>
    </nav>

আমার এও উল্লেখ করা উচিত যে আমি এই উদাহরণে 'ফুল ফ্যাট' jQuery ব্যবহার করছি তবে আপনি ফিল্টারিং এবং এগুলি দিয়ে যা করতে পেরেছেন তা সহজেই পরিবর্তন করতে পারবেন।


1

এখানে আমার দুটি সেন্ট, এটি ঠিক কাজ করে।

দ্রষ্টব্য: এটি চাইল্ডপেজগুলির সাথে মেলে না (এটি যা আমার প্রয়োজন)।

দেখুন:

<a ng-class="{active: isCurrentLocation('/my-path')}"  href="/my-path" >
  Some link
</a>

নিয়ন্ত্রক:

// make sure you inject $location as a dependency

$scope.isCurrentLocation = function(path){
    return path === $location.path()
}

1

@ কেফিসের জবাব অনুসারে, এটি মন্তব্য এবং আমার প্রস্তাব অনুযায়ী চূড়ান্ত নির্দেশনা নীচে দেওয়া হয়েছে:

.directive('activeLink', ['$location', function (location) {
    return {
      restrict: 'A',
      link: function(scope, element, attrs, controller) {
        var clazz = attrs.activeLink;        
        var path = attrs.href||attrs.ngHref;
        path = path.substring(1); //hack because path does not return including hashbang
        scope.location = location;
        scope.$watch('window.location.href', function () {
          var newPath = (window.location.pathname + window.location.search).substr(1);
          if (path === newPath) {
            element.addClass(clazz);
          } else {
            element.removeClass(clazz);
          }
        });
      }
    };
  }]);

এবং এটি এইচটিএমএলে কীভাবে ব্যবহৃত হবে তা এখানে:

<div ng-app="link">
  <a href="#/one" active-link="active">One</a>
  <a href="#/two" active-link="active">One</a>
  <a href="#" active-link="active">home</a>
</div>

এরপরে CSS সহ স্টাইলিং:

.active { color: red; }

1

ইউআই-রাউটার ব্যবহারকারীদের ক্ষেত্রে, আমার উত্তর কিছুটা ইেন্ডার ২০৫০ এর মতো, তবে আমি রাজ্যের নাম পরীক্ষার মাধ্যমে এটি করা পছন্দ করি:

$scope.isActive = function (stateName) {
  var active = (stateName === $state.current.name);
  return active;
};

সম্পর্কিত এইচটিএমএল:

<ul class="nav nav-sidebar">
    <li ng-class="{ active: isActive('app.home') }"><a ui-sref="app.home">Dashboard</a></li>
    <li ng-class="{ active: isActive('app.tiles') }"><a ui-sref="app.tiles">Tiles</a></li>
</ul>

1

উপরোক্ত নির্দেশাবলীর কোনও পরামর্শই আমার কাজে লাগেনি। আপনার যদি বুটস্ট্র্যাপ নববার থাকে তবে

<ul class="nav navbar-nav">
    <li><a ng-href="#/">Home</a></li>
    <li><a ng-href="#/about">About</a></li>
  ...
</ul>

(একটি হতে পারে $ yo angularপ্রারম্ভে) তারপর আপনি যোগ করতে চান .activeকরতে পিতা বা মাতা <li> উপাদান বর্গ তালিকা, না উপাদান নিজেই; অর্থাত <li class="active">..</li>। সুতরাং আমি এটি লিখেছি:

.directive('setParentActive', ['$location', function($location) {
  return {
    restrict: 'A',
    link: function(scope, element, attrs, controller) {
      var classActive = attrs.setParentActive || 'active',
          path = attrs.ngHref.replace('#', '');
      scope.location = $location;
      scope.$watch('location.path()', function(newPath) {
        if (path == newPath) {
          element.parent().addClass(classActive);
        } else {
          element.parent().removeClass(classActive);
        }
      })
    }
  }
}])

ব্যবহার set-parent-active; .activeডিফল্ট তাই সেট করার দরকার নেই

<li><a ng-href="#/about" set-parent-active>About</a></li>

এবং লিঙ্কটি সক্রিয় থাকাকালীন মূল <li>উপাদানটি হবে .active। সহজ বিকল্প .activeহিসাবে .highlight, যেমন একটি বিকল্প বর্গ ব্যবহার করতে

<li><a ng-href="#/about" set-parent-active="highlight">About</a></li>

আমি সুযোগটি চেষ্টা করেছি। $ অন ("$ রুট চেঞ্জসুসেসি", ফাংশন (ইভেন্ট, বর্তমান, পূর্ববর্তী) {প্রয়োগঅ্যাক্টিভ ক্লাস ();}); তবে এটি তখনই কাজ করে যখন লিঙ্কটি ক্লিক করা হয় এবং 'পৃষ্ঠা লোডে' (রিফ্রেশ বোতামে ক্লিক করা) নয়। পর্যবেক্ষক অবস্থান আমার জন্য কাজ করেছে
sawe

0

আমার জন্য সর্বাধিক গুরুত্বপূর্ণ ছিল সমস্ত বুটস্ট্র্যাপের ডিফল্ট কোডে পরিবর্তন না করা। এখানে এটি আমার মেনু নিয়ামক যা মেনু বিকল্পগুলির জন্য অনুসন্ধান করে এবং তারপরে আমাদের পছন্দসই আচরণ যুক্ত করে।

file: header.js
function HeaderCtrl ($scope, $http, $location) {
  $scope.menuLinkList = [];
  defineFunctions($scope);
  addOnClickEventsToMenuOptions($scope, $location);
}

function defineFunctions ($scope) {
  $scope.menuOptionOnClickFunction = function () {
    for ( var index in $scope.menuLinkList) {
      var link = $scope.menuLinkList[index];
      if (this.hash === link.hash) {
        link.parentElement.className = 'active';
      } else {
        link.parentElement.className = '';
      }
    }
  };
}

function addOnClickEventsToMenuOptions ($scope, $location) {
  var liList = angular.element.find('li');
  for ( var index in liList) {
    var liElement = liList[index];
    var link = liElement.firstChild;
    link.onclick = $scope.menuOptionOnClickFunction;
    $scope.menuLinkList.push(link);
    var path = link.hash.replace("#", "");
    if ($location.path() === path) {
      link.parentElement.className = 'active';
    }
  }
}

     <script src="resources/js/app/header.js"></script>
 <div class="navbar navbar-fixed-top" ng:controller="HeaderCtrl">
    <div class="navbar-inner">
      <div class="container-fluid">
        <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
          <span class="icon-bar"></span> <span class="icon-bar"></span> 
<span     class="icon-bar"></span>
        </button>
        <a class="brand" href="#"> <img src="resources/img/fom-logo.png"
          style="width: 80px; height: auto;">
        </a>
        <div class="nav-collapse collapse">
          <ul class="nav">
            <li><a href="#/platforms">PLATFORMS</a></li>
            <li><a href="#/functionaltests">FUNCTIONAL TESTS</a></li>
          </ul> 
        </div>
      </div>
    </div>
  </div>

0

একই সমস্যা ছিল। এখানে আমার সমাধান :

.directive('whenActive',
  [
    '$location',
    ($location)->
      scope: true,
      link: (scope, element, attr)->
        scope.$on '$routeChangeSuccess', 
          () ->
            loc = "#"+$location.path()
            href = element.attr('href')
            state = href.indexOf(loc)
            substate = -1

            if href.length > 3
              substate = loc.indexOf(href)
            if loc.length is 2
              state = -1

            #console.log "Is Loc: "+loc+" in Href: "+href+" = "+state+" and Substate = "+substate

            if state isnt -1 or substate isnt -1
              element.addClass 'selected'
              element.parent().addClass 'current-menu-item'
            else if href is '#' and loc is '#/'
              element.addClass 'selected'
              element.parent().addClass 'current-menu-item'
            else
              element.removeClass 'selected'
              element.parent().removeClass 'current-menu-item'
  ])

0

আমি এই জন্য একটি নির্দেশিকা লিখেছি।

ব্যবহার:

<ul class="nav navbar-nav">
  <li active><a href="#/link1">Link 1</a></li>
  <li active><a href="#/link2">Link 2</a></li>
</ul>

বাস্তবায়ন:

angular.module('appName')
  .directive('active', function ($location, $timeout) {
    return {
      restrict: 'A',
      link: function (scope, element, attrs) {
        // Whenever the user navigates to a different page...
        scope.$on('$routeChangeSuccess', function () {
          // Defer for other directives to load first; this is important
          // so that in case other directives are used that this directive
          // depends on, such as ng-href, the href is evaluated before
          // it's checked here.
          $timeout(function () {
            // Find link inside li element
            var $link = element.children('a').first();

            // Get current location
            var currentPath = $location.path();

            // Get location the link is pointing to
            var linkPath = $link.attr('href').split('#').pop();

            // If they are the same, it means the user is currently
            // on the same page the link would point to, so it should
            // be marked as such
            if (currentPath === linkPath) {
              $(element).addClass('active');
            } else {
              // If they're not the same, a li element that is currently
              // marked as active needs to be "un-marked"
              element.removeClass('active');
            }
          });
        });
      }
    };
  });

পরীক্ষা:

'use strict';

describe('Directive: active', function () {

  // load the directive's module
  beforeEach(module('appName'));

  var element,
      scope,
      location,
      compile,
      rootScope,
      timeout;

  beforeEach(inject(function ($rootScope, $location, $compile, $timeout) {
    scope = $rootScope.$new();
    location = $location;
    compile = $compile;
    rootScope = $rootScope;
    timeout = $timeout;
  }));

  describe('with an active link', function () {
    beforeEach(function () {
      // Trigger location change
      location.path('/foo');
    });

    describe('href', function () {
      beforeEach(function () {
        // Create and compile element with directive; note that the link
        // is the same as the current location after the location change.
        element = angular.element('<li active><a href="#/foo">Foo</a></li>');
        element = compile(element)(scope);

        // Broadcast location change; the directive waits for this signal
        rootScope.$broadcast('$routeChangeSuccess');

        // Flush timeout so we don't have to write asynchronous tests.
        // The directive defers any action using a timeout so that other
        // directives it might depend on, such as ng-href, are evaluated
        // beforehand.
        timeout.flush();
      });

      it('adds the class "active" to the li', function () {
        expect(element.hasClass('active')).toBeTruthy();
      });
    });

    describe('ng-href', function () {
      beforeEach(function () {
        // Create and compile element with directive; note that the link
        // is the same as the current location after the location change;
        // however this time with an ng-href instead of an href.
        element = angular.element('<li active><a ng-href="#/foo">Foo</a></li>');
        element = compile(element)(scope);

        // Broadcast location change; the directive waits for this signal
        rootScope.$broadcast('$routeChangeSuccess');

        // Flush timeout so we don't have to write asynchronous tests.
        // The directive defers any action using a timeout so that other
        // directives it might depend on, such as ng-href, are evaluated
        // beforehand.
        timeout.flush();
      });

      it('also works with ng-href', function () {
        expect(element.hasClass('active')).toBeTruthy();
      });
    });
  });

  describe('with an inactive link', function () {
    beforeEach(function () {
      // Trigger location change
      location.path('/bar');

      // Create and compile element with directive; note that the link
      // is the NOT same as the current location after the location change.
      element = angular.element('<li active><a href="#/foo">Foo</a></li>');
      element = compile(element)(scope);

      // Broadcast location change; the directive waits for this signal
      rootScope.$broadcast('$routeChangeSuccess');

      // Flush timeout so we don't have to write asynchronous tests.
      // The directive defers any action using a timeout so that other
      // directives it might depend on, such as ng-href, are evaluated
      // beforehand.
      timeout.flush();
    });

    it('does not add the class "active" to the li', function () {
      expect(element.hasClass('active')).not.toBeTruthy();
    });
  });

  describe('with a formerly active link', function () {
    beforeEach(function () {
      // Trigger location change
      location.path('/bar');

      // Create and compile element with directive; note that the link
      // is the same as the current location after the location change.
      // Also not that the li element already has the class "active".
      // This is to make sure that a link that is active right now will
      // not be active anymore when the user navigates somewhere else.
      element = angular.element('<li class="active" active><a href="#/foo">Foo</a></li>');
      element = compile(element)(scope);

      // Broadcast location change; the directive waits for this signal
      rootScope.$broadcast('$routeChangeSuccess');

      // Flush timeout so we don't have to write asynchronous tests.
      // The directive defers any action using a timeout so that other
      // directives it might depend on, such as ng-href, are evaluated
      // beforehand.
      timeout.flush();
    });

    it('removes the "active" class from the li', function () {
      expect(element.hasClass('active')).not.toBeTruthy();
    });
  });
});

0

পথ:

$routeProvider.when('/Account/', { templateUrl: '/Home/Account', controller: 'HomeController' });

মেনু এইচটিএমএল:

<li id="liInicio" ng-class="{'active':url=='account'}">

নিয়ামক:

angular.module('Home').controller('HomeController', function ($scope, $http, $location) {
    $scope.url = $location.url().replace(/\//g, "").toLowerCase();
...

আমি এখানে যে সমস্যাটি পেয়েছি তা হ'ল মেনু আইটেমটি তখনই সক্রিয় থাকে যখন পুরো পৃষ্ঠাটি লোড হয়। আংশিক দৃশ্যটি লোড হয়ে গেলে মেনুটি পরিবর্তন হয় না। কেউ জানে কেন এমন হয়?


0
$scope.getClass = function (path) {
return String(($location.absUrl().split('?')[0]).indexOf(path)) > -1 ? 'active' : ''
}


<li class="listing-head" ng-class="getClass('/v/bookings')"><a href="/v/bookings">MY BOOKING</a></li>
<li class="listing-head" ng-class="getClass('/v/fleets')"><a href="/v/fleets">MY FLEET</a></li>
<li class="listing-head" ng-class="getClass('/v/adddriver')"><a href="/v/adddriver">ADD DRIVER</a></li>
<li class="listing-head" ng-class="getClass('/v/bookings')"><a href="/v/invoice">INVOICE</a></li>
<li class="listing-head" ng-class="getClass('/v/profile')"><a href="/v/profile">MY PROFILE</a></li>
<li class="listing-head"><a href="/v/logout">LOG OUT</a></li>

0

আমি সবচেয়ে সহজ সমাধান খুঁজে পেয়েছি। এইচটিএমএলতে কেবল সূচিপত্রের তুলনা করতে

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

myApp.run(function($rootScope) {
    $rootScope.$on("$locationChangeStart", function(event, next, current) { 
         $rootScope.isCurrentPath = $location.path();  
    });
});



<li class="{{isCurrentPath.indexOf('help')>-1 ? 'active' : '' }}">
<a href="/#/help/">
          Help
        </a>
</li>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.