অ্যাঙ্গুলারজেএস-এ কীভাবে ভিউ / আংশিক নির্দিষ্ট স্টাইলিং অন্তর্ভুক্ত করা যায়


132

আমার অ্যাপ্লিকেশন বিভিন্ন ধরণের ব্যবহারের জন্য পৃথক স্টাইলশিট ব্যবহার করার সঠিক / স্বীকৃত উপায় কী?

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

অন্য সম্ভাবনাটি আমার সূচক html এর মধ্যে পৃথক স্টাইলশিট স্থাপন করছে headতবে আমি চাই যদি কেবল স্টাইলশিটটি সম্পাদনার নামে বোঝানো হয়।

স্ট্রিং সিএসএস সার্ভার ফর্ম হওয়ার পরে স্টাইলিং কার্যকর হবে না, ধীর ব্রাউজারে অবরুদ্ধ বিন্যাসে থাকা সামগ্রীর দ্রুত ফ্ল্যাশ করতে পারে? যদিও আমি স্থানীয়ভাবে এটি পরীক্ষা করে নিচ্ছি তবে এখনও আমার এটির সাক্ষ্য পাওয়া যায়নি।

অ্যাঙ্গুলারগুলিতে পাস করা বস্তুর মাধ্যমে সিএসএস লোড করার কোনও উপায় আছে কি $routeProvider.when?

আগাম ধন্যবাদ!


আমি আপনার "অবরুদ্ধ বিন্যাসযোগ্য সামগ্রীগুলির দ্রুত ফ্ল্যাশ" দৃ valid়তার সাথে বৈধতা দিয়েছি। আমি এই ফর্ম্যাটে সিএসএস <link>ট্যাগ ব্যবহার করেছি , সর্বশেষতম ক্রোম, আমার স্থানীয় মেশিনের সার্ভার (এবং "প্রথম লোড" শর্তাবলী অনুকরণ করার জন্য "ক্যাশে অক্ষম করুন") দিয়ে। আমি কল্পনা করেছিলাম যে সার্ভারে এইচটিএমএল আংশিক কোনও ট্যাগ প্রাক- serোকানো এই সমস্যাটি এড়াতে পারে। <style>
poshest

উত্তর:


150

আমি জানি এই প্রশ্নটি এখন পুরানো, তবে এই সমস্যার বিভিন্ন সমাধান নিয়ে এক টন গবেষণা করার পরে, আমি মনে করি আমি আরও ভাল সমাধান নিয়ে এসেছি।

আপডেট 1: এই উত্তরটি পোস্ট করার পরে, আমি এই কোডটি সমস্তই আমি একটি সাধারণ পরিষেবাতে যুক্ত করেছি যা আমি গিটহাবে পোস্ট করেছি। রেপো এখানে অবস্থিত । আরও তথ্যের জন্য নির্দ্বিধায় এটি দেখুন।

আপডেট 2: এই উত্তরটি যদি দুর্দান্ত হয় তবে আপনার রুটগুলির জন্য স্টাইলশিটগুলি টানানোর জন্য যদি আপনার হালকা ওজনের কোনও সমাধান হয়। আপনি যদি আপনার অ্যাপ্লিকেশন জুড়ে অন-চাহিদা স্টাইলশিটগুলি পরিচালনা করার জন্য আরও সম্পূর্ণ সমাধান চান তবে আপনি ডোর 3 এর অ্যাঙ্গুলারসিএসএস প্রকল্পটি চেকআউট করতে চাইতে পারেন । এটি আরও অনেক সূক্ষ্ম দানযুক্ত কার্যকারিতা সরবরাহ করে।

ভবিষ্যতে যে কেউ আগ্রহী হলে আমি এখানে যা এলাম তা এখানে:

1. <head>উপাদানটির জন্য একটি কাস্টম নির্দেশিকা তৈরি করুন :

app.directive('head', ['$rootScope','$compile',
    function($rootScope, $compile){
        return {
            restrict: 'E',
            link: function(scope, elem){
                var html = '<link rel="stylesheet" ng-repeat="(routeCtrl, cssUrl) in routeStyles" ng-href="{{cssUrl}}" />';
                elem.append($compile(html)(scope));
                scope.routeStyles = {};
                $rootScope.$on('$routeChangeStart', function (e, next, current) {
                    if(current && current.$$route && current.$$route.css){
                        if(!angular.isArray(current.$$route.css)){
                            current.$$route.css = [current.$$route.css];
                        }
                        angular.forEach(current.$$route.css, function(sheet){
                            delete scope.routeStyles[sheet];
                        });
                    }
                    if(next && next.$$route && next.$$route.css){
                        if(!angular.isArray(next.$$route.css)){
                            next.$$route.css = [next.$$route.css];
                        }
                        angular.forEach(next.$$route.css, function(sheet){
                            scope.routeStyles[sheet] = sheet;
                        });
                    }
                });
            }
        };
    }
]);

এই নির্দেশনাটি নিম্নলিখিত জিনিসগুলি করে:

  1. এটা তোলে প্রনয়ন (ব্যবহার $compile) একটি HTML স্ট্রিংটি একটি সেট তৈরি করে <link />প্রতিটি আইটেমের জন্য ট্যাগ scope.routeStylesব্যবহার বস্তুর ng-repeatএবং ng-href
  2. এটি ট্যাগে <link />উপাদানগুলির সংকলন সংযোজন করে <head>
  3. এরপরে এটি ইভেন্টগুলি $rootScopeশোনার জন্য ব্যবহার করে '$routeChangeStart'। প্রতিটি '$routeChangeStart'ইভেন্টের জন্য, এটি "বর্তমান" $$routeঅবজেক্টটি ধরে রাখে (ব্যবহারকারী যে পথে যেতে চলেছে) এবং তার আংশিক-নির্দিষ্ট সিএসএস ফাইল (গুলি) <head>ট্যাগ থেকে সরিয়ে দেয় । এটি "পরবর্তী" $$routeঅবজেক্টটিকে (ব্যবহারকারী যে পথে যেতে চলেছে) ধরে ফেলে এবং তার কোনও আংশিক-নির্দিষ্ট সিএসএস ফাইল (গুলি) <head>ট্যাগটিতে যুক্ত করে।
  4. এবং ng-repeatসংকলিত <link />ট্যাগের অংশটি পৃষ্ঠা-নির্দিষ্ট স্টাইলশিটগুলিকে যুক্ত করা বা scope.routeStylesঅবজেক্ট থেকে কী সরানো হবে তার উপর ভিত্তি করে সমস্ত সংযোজন এবং অপসারণকে পরিচালনা করে ।

দ্রষ্টব্য: এটির জন্য আপনার ng-appঅ্যাট্রিবিউটটি <html>উপাদানটিতে থাকা দরকার, না <body>কোনও অভ্যন্তরে বা না <html>

২. কোন স্টাইলশিটগুলি কোন রুটের সাথে সম্পর্কিত তা উল্লেখ করুন $routeProvider:

app.config(['$routeProvider', function($routeProvider){
    $routeProvider
        .when('/some/route/1', {
            templateUrl: 'partials/partial1.html', 
            controller: 'Partial1Ctrl',
            css: 'css/partial1.css'
        })
        .when('/some/route/2', {
            templateUrl: 'partials/partial2.html',
            controller: 'Partial2Ctrl'
        })
        .when('/some/route/3', {
            templateUrl: 'partials/partial3.html',
            controller: 'Partial3Ctrl',
            css: ['css/partial3_1.css','css/partial3_2.css']
        })
}]);

এই কনফিগারেশনটি cssপ্রতিটি পৃষ্ঠার রুট সেটআপ করতে ব্যবহৃত অবজেক্টটিতে একটি কাস্টম সম্পত্তি যুক্ত করে। যে বস্তু প্রতিটি '$routeChangeStart'ইভেন্ট হিসাবে পাস করা হয় .$$route। সুতরাং '$routeChangeStart'ইভেন্টটি শোনার সময় , আমরা cssআমাদের নির্দিষ্ট করা সম্পত্তি দখল করতে পারি এবং <link />প্রয়োজনীয়ভাবে সেই ট্যাগগুলিকে সংযোজন / মুছে ফেলতে পারি । নোট করুন যে cssরুটে কোনও সম্পত্তি নির্দিষ্ট করে দেওয়া সম্পূর্ণরূপে alচ্ছিক, কারণ এটি '/some/route/2'উদাহরণ থেকে বাদ দেওয়া হয়েছিল । যদি এই রুটে কোনও cssসম্পত্তি না থাকে তবে <head>নির্দেশিকা সেই রুটের জন্য কেবল কিছুই করবে না। এও নোট করুন যে এমনকি প্রতি রুটে একাধিক পৃষ্ঠা-নির্দিষ্ট স্টাইলশিট থাকতে পারে, যেমন '/some/route/3'উপরের উদাহরণ হিসাবে , যেখানে cssসম্পত্তি সেই রুটের জন্য প্রয়োজনীয় স্টাইলশিটের তুলনায় পাথের একটি সারণি is

৩. আপনি এই দুটি জিনিস শেষ করে দিয়েছিলেন যা প্রয়োজন যা কিছু সেটআপ করে এবং এটি আমার মতে, সবচেয়ে পরিষ্কার কোড সহ সম্ভব করে তোলে।

আশা করি এটি অন্য কেউ যারা এই সমস্যা নিয়ে আমার সাথে যতটা লড়াই করে চলেছে সম্ভবত তাকে সহায়তা করবে।


2
পবিত্র মোলি, এর জন্য ধন্যবাদ! ঠিক আমি খুঁজছেন ছিল কি :). এখনই এটি পরীক্ষা করা হয়েছে এবং এটি পুরোপুরি কাজ করে (আরও কার্যকরভাবে কার্যকর)। হতে পারে আপনার এটির জন্য একটি টান অনুরোধ তৈরি করতে এবং এটি কোরটিতে প্রবেশ করা উচিত। আমি জানি অ্যাংুলারজেএস এর ছেলেরা স্কোপড সিএসএসের দিকে তাকাচ্ছিল, এটি কি সঠিক দিকে যেতে পারে?
smets.kevin

এই ছেলেরা আমার চেয়ে অনেক বেশি স্মার্ট। আমি নিশ্চিত যে তারা এর আগে (এই জাতীয় সমাধান) চিন্তা করে থাকতে পারে এবং কারণেই যে কোনও কারণেই এটিকে বাস্তবায়িত না করার সিদ্ধান্ত নিয়েছে।
টেনিসেন্ট

সিএসএস ফাইলের সঠিক স্থানটি কী? CSS: 'CSS / partial1.css' কৌনিক অ্যাপ ফোল্ডারের মূলটিতে CSS ফোল্ডারকে বোঝায়?
কর্ডল

এটি আপনার index.htmlফাইলের সাথে সম্পর্কিত। সুতরাং উপরের উদাহরণে, index.htmlমূলটিতে হবে এবং cssফোল্ডারটি রুটে থাকবে, এতে সমস্ত CSS ফাইল থাকবে। তবে আপনি নিজের অ্যাপ্লিকেশনটি আপনার পছন্দ মতো গঠন করতে পারেন, যতক্ষণ আপনি সঠিক আপেক্ষিক পাথ ব্যবহার করেন।
টেনিসেন্ট

1
@ ক্যাপিস, স্ক্রিপ্টটি যখন আপনি নতুন দৃশ্যে চলে যান তখন পূর্ববর্তী দর্শনটির স্টাইলটি সরিয়ে দেয়। আপনি যে ঘটতে না চান তাহলে, সহজভাবে নির্দেশ থেকে নিম্নোক্ত কোডটি সরাতে: angular.forEach(current.$$route.css, function(sheet){ delete scope.routeStyles[sheet]; });
টেনিসেন্ট

34

@ টেনিসজেন্টের সমাধানটি দুর্দান্ত। তবে আমি মনে করি কিছুটা সীমাবদ্ধ।

কৌণিকের মধ্যে মডুলারিটি এবং এনক্যাপসুলেশন রুটের বাইরে চলে যায়। ওয়েব যেভাবে উপাদান-ভিত্তিক বিকাশের দিকে এগিয়ে চলেছে তার ভিত্তিতে, এটিও নির্দেশিকাগুলিতে প্রয়োগ করা গুরুত্বপূর্ণ।

আপনি ইতিমধ্যে জানেন যে, কৌণিক আমরা পৃষ্ঠাগুলি এবং উপাদানগুলিতে টেমপ্লেট (কাঠামো) এবং নিয়ন্ত্রণকারীদের (আচরণ) অন্তর্ভুক্ত করতে পারি। AngularCSS সর্বশেষ অনুপস্থিত অংশটিকে সক্ষম করে: স্টাইলশিট সংযুক্ত করে (উপস্থাপনা)।

সম্পূর্ণ সমাধানের জন্য আমি AngularCSS ব্যবহার করার পরামর্শ দিই।

  1. অ্যাঙ্গুলারের এনজিআরট, ইউআই রাউটার, নির্দেশনা, নিয়ন্ত্রক এবং পরিষেবাগুলিকে সমর্থন করে।
  2. থাকতে হবে না ng-app<html>ট্যাগ। আপনার কাছে একই পৃষ্ঠায় একাধিক অ্যাপ্লিকেশন চলার সময় এটি গুরুত্বপূর্ণ
  3. স্টাইলশীটগুলি যেখানে ইনজেকশন করা হয়েছে তা আপনি কাস্টমাইজ করতে পারেন: মাথা, দেহ, কাস্টম নির্বাচনকারী ইত্যাদি ...
  4. প্রিলোডিং, অবিরাম এবং ক্যাশে বুস্টিং সমর্থন করে
  5. মিডিয়া ক্যোয়ারী সমর্থন করে এবং ম্যাচমিডিয়া এপিআইয়ের মাধ্যমে পৃষ্ঠা লোডটিকে অনুকূল করে

https://github.com/door3/angular-css

এখানে কিছু উদাহরন:

রুট

  $routeProvider
    .when('/page1', {
      templateUrl: 'page1/page1.html',
      controller: 'page1Ctrl',
      /* Now you can bind css to routes */
      css: 'page1/page1.css'
    })
    .when('/page2', {
      templateUrl: 'page2/page2.html',
      controller: 'page2Ctrl',
      /* You can also enable features like bust cache, persist and preload */
      css: {
        href: 'page2/page2.css',
        bustCache: true
      }
    })
    .when('/page3', {
      templateUrl: 'page3/page3.html',
      controller: 'page3Ctrl',
      /* This is how you can include multiple stylesheets */
      css: ['page3/page3.css','page3/page3-2.css']
    })
    .when('/page4', {
      templateUrl: 'page4/page4.html',
      controller: 'page4Ctrl',
      css: [
        {
          href: 'page4/page4.css',
          persist: true
        }, {
          href: 'page4/page4.mobile.css',
          /* Media Query support via window.matchMedia API
           * This will only add the stylesheet if the breakpoint matches */
          media: 'screen and (max-width : 768px)'
        }, {
          href: 'page4/page4.print.css',
          media: 'print'
        }
      ]
    });

ডিরেক্টিভ

myApp.directive('myDirective', function () {
  return {
    restrict: 'E',
    templateUrl: 'my-directive/my-directive.html',
    css: 'my-directive/my-directive.css'
  }
});

অতিরিক্ত হিসাবে, আপনি $cssপ্রান্তের ক্ষেত্রে পরিষেবাটি ব্যবহার করতে পারেন :

myApp.controller('pageCtrl', function ($scope, $css) {

  // Binds stylesheet(s) to scope create/destroy events (recommended over add/remove)
  $css.bind({ 
    href: 'my-page/my-page.css'
  }, $scope);

  // Simply add stylesheet(s)
  $css.add('my-page/my-page.css');

  // Simply remove stylesheet(s)
  $css.remove(['my-page/my-page.css','my-page/my-page2.css']);

  // Remove all stylesheets
  $css.removeAll();

});

আপনি এখানে AngularCSS সম্পর্কে আরও পড়তে পারেন:

http://door3.com/insights/introducing-angularcss-css-demand-angularjs


1
আমি এখানে আপনার পদ্ধতির সত্যিই পছন্দ করি, কিন্তু ভাবছিলাম যে এটি কোনও প্রোডাকশন অ্যাপ্লিকেশনটিতে কীভাবে ব্যবহার করা যেতে পারে যেখানে সমস্ত CSS শৈলীর একসাথে একত্রিত হওয়া দরকার? এইচটিএমএল টেমপ্লেটগুলির জন্য আমি প্রডাকশন কোডের জন্য $ টেমপ্লেটক্যাচ.পুট () ব্যবহার করি এবং CSS এর জন্য অনুরূপ কিছু করা ভাল লাগবে।
টম মাকিন

আপনার যদি সার্ভার থেকে কনসেটেটেড সিএসএস দরকার হয় তবে আপনি সর্বদা /getCss?files=file1(.css),file2,file3 এর মতো কিছু করতে পারেন এবং সার্ভারটি প্রদত্ত ক্রমে এবং কনটেটেটেটে সমস্ত 3 ফাইলের সাথে প্রতিক্রিয়া জানাবে।
পেটর আরবান

13

এর মধ্যে শিরোনামে একটি নতুন স্টাইলশিট যুক্ত করতে পারে $routeProvider। সরলতার জন্য একটি স্ট্রিং ব্যবহার করছি তবে নতুন লিঙ্ক উপাদানও তৈরি করতে পারে, বা স্টাইলশিটের জন্য একটি পরিষেবা তৈরি করতে পারে

/* check if already exists first - note ID used on link element*/
/* could also track within scope object*/
if( !angular.element('link#myViewName').length){
    angular.element('head').append('<link id="myViewName" href="myViewName.css" rel="stylesheet">');
}

পৃষ্ঠায় প্রিলোডিংয়ের সবচেয়ে বড় সুবিধা হ'ল যে কোনও পটভূমি চিত্র ইতিমধ্যে উপস্থিত থাকবে এবং এর কম স্বল্পতার সাথে FOUC


এই মাত্র সহ একই জিনিস সাধা করবে না <link><head>index.html এর স্ট্যাটিক্যালি যদিও?
ব্র্যান্ডন

না যদি whenরুটের জন্য কল না করা হয়। এই কোডটি controllerএর whenমধ্যে routeProviderবা সম্ভবত resolveকলব্যাকের মধ্যে কলব্যাকের মধ্যে রাখতে পারে যা সম্ভবত তাড়াতাড়ি ট্রিগার করে
Charlietfl

ওহ ঠিক আছে, আমার খারাপ, যে ক্লিক করে না। দেখতে বেশ শক্ত লাগছে, যদি আপনি বোঝাতে পারেন তবে এর প্রিলোডিংটি আমি যখন ইনজেকশন দিচ্ছি তবে কীভাবে?
ব্র্যান্ডন

1
আপনি এটি এতে যুক্ত করে রাখলে এটি প্রিলোডিং নয় routeprovider... পৃষ্ঠাটি পরিবেশন করার সময় এটি মন্তব্যটি মূল পৃষ্ঠার প্রধানের মধ্যে অন্তর্ভুক্ত করার বিষয়ে ছিল
Charlietfl

-_- দুঃখিত, আপনি বলতে না পারলে আমি ঘুমের অভাব বোধ করছি। যাইহোক, আমি এখন যেখানে এ ধরণের। যখন ব্যবহারকারী সমস্ত মতামত স্যুইচ করেন তখন আমার সমস্ত স্টাইলশিট একবারে লোড করার ওভারহেড কিছু FOUC থাকার চেয়ে ভাল কিনা তা বোঝার চেষ্টা করা হচ্ছে। আমি অনুমান করি যে এটি আসলে কোনও কৌণিক-সম্পর্কিত প্রশ্ন নয় যতটা এটি ওয়েব অ্যাপ ইউএক্স সম্পর্কে। ধন্যবাদ যদিও, আমি প্রিললোডিং না করার সিদ্ধান্ত নিলে আমি সম্ভবত আপনার পরামর্শ নিয়ে যাব।
ব্র্যান্ডন

5

@ sz3, আজ যথেষ্ট মজার যেটি আপনি অর্জন করার চেষ্টা করছেন ঠিক তেমনটাই আমাকে করতে হয়েছিল: ' একটি নির্দিষ্ট সিএসএস ফাইল তখনই লোড করুন যখন কোনও ব্যবহারকারী অ্যাক্সেস করতে পারে ' একটি নির্দিষ্ট পৃষ্ঠা। সুতরাং আমি উপরের সমাধানটি ব্যবহার করেছি।

তবে আমি আপনার শেষ প্রশ্নের উত্তর দিতে এখানে এসেছি: ' কোডটি আমার ঠিক কোথায় রাখা উচিত। কোন ধারণা ? '

আপনি ঠিক মধ্যে কোড সহ ছিল সমাধানে , কিন্তু আপনি একটি বিট বিন্যাস পরিবর্তন করতে হবে।

নীচের কোডটি একবার দেখুন:

.when('/home', {
  title:'Home - ' + siteName,
  bodyClass: 'home',
  templateUrl: function(params) {
    return 'views/home.html';
  },
  controler: 'homeCtrl',
  resolve: {
    style : function(){
      /* check if already exists first - note ID used on link element*/
      /* could also track within scope object*/
      if( !angular.element('link#mobile').length){
        angular.element('head').append('<link id="home" href="home.css" rel="stylesheet">');
      }
    }
  }
})

আমি কেবল পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করছে , এটি এইচটিএমএলকে ইনজেকশন দেয় এবং আমি যখন '/ হোম' রুটে আঘাত করি তখনই এটি আমার 'হোম সিএসএস' লোড করে।

পুরো ব্যাখ্যাটি এখানে পাওয়া যাবে , তবে মূলত সমাধান করুন: বিন্যাসে কোনও বস্তু পাওয়া উচিত

{
  'key' : string or function()
} 

আপনি 'নাম দিতে পারেন কী আমার ক্ষেত্রে আমি' নামক - 'আপনার মত কিছু শৈলী '।

তারপরে মানটির জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

  • যদি এটি একটি স্ট্রিং হয় , তবে এটি কোনও পরিষেবার জন্য একটি নাম।

  • যদি এটি ফাংশন হয় , তবে এটি ইনজেকশন দেওয়া হয় এবং ফেরতের মানটিকে নির্ভরতা হিসাবে বিবেচনা করা হয়।

এখানে মূল বক্তব্যটি হ'ল নিয়ামকটি তাত্ক্ষণিকভাবে চালিত হওয়ার আগে এবং $ রুট চেঞ্জসুসেস ইভেন্টটি বরখাস্ত করার আগে ফাংশনের অভ্যন্তরীণ কোডটি কার্যকর করা হবে।

আশা করি এইটি কাজ করবে.


2

দুর্দান্ত, আপনাকে ধন্যবাদ !! এটি ইউআই-রাউটারের সাথে কাজ করার জন্য কয়েকটি সামঞ্জস্য করতে হয়েছিল:

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

    app.directive('head', ['$rootScope', '$compile', '$state', function ($rootScope, $compile, $state) {

    return {
        restrict: 'E',
        link: function ($scope, elem, attrs, ctrls) {

            var html = '<link rel="stylesheet" ng-repeat="(routeCtrl, cssUrl) in routeStyles" ng-href="{{cssUrl}}" />';
            var el = $compile(html)($scope)
            elem.append(el);
            $scope.routeStyles = {};

            function applyStyles(state, action) {
                var sheets = state ? state.css : null;
                if (state.parent) {
                    var parentState = $state.get(state.parent)
                    applyStyles(parentState, action);
                }
                if (sheets) {
                    if (!Array.isArray(sheets)) {
                        sheets = [sheets];
                    }
                    angular.forEach(sheets, function (sheet) {
                        action(sheet);
                    });
                }
            }

            $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {

                applyStyles(fromState, function(sheet) {
                    delete $scope.routeStyles[sheet];
                    console.log('>> remove >> ', sheet);
                });

                applyStyles(toState, function(sheet) {
                    $scope.routeStyles[sheet] = sheet;
                    console.log('>> add >> ', sheet);
                });
            });
        }
    }
}]);

আমার সিএসএস গণ্ডগোলের সাথে আমার সর্বত্র মুছে ফেলার দরকার ছিল না তবে ইউআই-রাউটারের সাথে এটি বেশ সহায়ক হয়েছিল! ধন্যবাদ :)
12

1

আপনি শুধুমাত্র করা আপনার সিএসএস প্রয়োজন প্রয়োগ একটি নির্দিষ্ট দৃশ্যে, আমি আমার নিয়ামক ভিতরে এই সহজে ব্যবহারযোগ্য স্নিপেট ব্যবহার করছি:

$("body").addClass("mystate");

$scope.$on("$destroy", function() {
  $("body").removeClass("mystate"); 
});

bodyরাজ্যটি লোড হওয়ার পরে এটি আমার ট্যাগে একটি শ্রেণি যুক্ত করবে এবং রাষ্ট্রটি ধ্বংস হয়ে যাওয়ার পরে এটি সরিয়ে ফেলবে (যেমন কেউ পৃষ্ঠা পরিবর্তন করে)। এটি আমার আবেদনের ক্ষেত্রে কেবলমাত্র একটি সিএসএস প্রয়োগ করার জন্য সিএসএসের প্রয়োজন সম্পর্কিত আমার সম্পর্কিত সমস্যা সমাধান করে।


0

'কঠোর ব্যবহার'; কৌণিক.মডিউল ('অ্যাপ') .আরুন (['$ রুটস্কোপ', '$ রাষ্ট্র', '$ রাষ্ট্রপরিম', ফাংশন ($ রুটস্কোপ, $ রাষ্ট্র, $ রাজ্যপ্যারাম) {$ রুটস্কোপ $ state = $ state; $ রুটস্কোপ ।

            $urlRouterProvider
                .otherwise('/app/dashboard');
            $stateProvider
                .state('app', {
                    abstract: true,
                    url: '/app',
                    templateUrl: 'views/layout.html'
                })
                .state('app.dashboard', {
                    url: '/dashboard',
                    templateUrl: 'views/dashboard.html',
                    ncyBreadcrumb: {
                        label: 'Dashboard',
                        description: ''
                    },
                    resolve: {
                        deps: [
                            '$ocLazyLoad',
                            function($ocLazyLoad) {
                                return $ocLazyLoad.load({
                                    serie: true,
                                    files: [
                                        'lib/jquery/charts/sparkline/jquery.sparkline.js',
                                        'lib/jquery/charts/easypiechart/jquery.easypiechart.js',
                                        'lib/jquery/charts/flot/jquery.flot.js',
                                        'lib/jquery/charts/flot/jquery.flot.resize.js',
                                        'lib/jquery/charts/flot/jquery.flot.pie.js',
                                        'lib/jquery/charts/flot/jquery.flot.tooltip.js',
                                        'lib/jquery/charts/flot/jquery.flot.orderBars.js',
                                        'app/controllers/dashboard.js',
                                        'app/directives/realtimechart.js'
                                    ]
                                });
                            }
                        ]
                    }
                })
                .state('ram', {
                    abstract: true,
                    url: '/ram',
                    templateUrl: 'views/layout-ram.html'
                })
                .state('ram.dashboard', {
                    url: '/dashboard',
                    templateUrl: 'views/dashboard-ram.html',
                    ncyBreadcrumb: {
                        label: 'test'
                    },
                    resolve: {
                        deps: [
                            '$ocLazyLoad',
                            function($ocLazyLoad) {
                                return $ocLazyLoad.load({
                                    serie: true,
                                    files: [
                                        'lib/jquery/charts/sparkline/jquery.sparkline.js',
                                        'lib/jquery/charts/easypiechart/jquery.easypiechart.js',
                                        'lib/jquery/charts/flot/jquery.flot.js',
                                        'lib/jquery/charts/flot/jquery.flot.resize.js',
                                        'lib/jquery/charts/flot/jquery.flot.pie.js',
                                        'lib/jquery/charts/flot/jquery.flot.tooltip.js',
                                        'lib/jquery/charts/flot/jquery.flot.orderBars.js',
                                        'app/controllers/dashboard.js',
                                        'app/directives/realtimechart.js'
                                    ]
                                });
                            }
                        ]
                    }
                })
                 );

কোনও প্রসঙ্গ সহ একটি সাধারণ কোড উদাহরণ খুব কমই একটি প্রশ্নের যথেষ্ট উত্তর। তদ্ব্যতীত, এই প্রশ্নের ইতিমধ্যে একটি অত্যন্ত স্বীকৃত উত্তর রয়েছে।
এজে এক্স।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.