Angular.js:। মূল্য () অ্যাপ্লিকেশন প্রশস্ত ধ্রুবক সেট করার সঠিক উপায় এবং কীভাবে এটি একটি নিয়ামকটিতে পুনরুদ্ধার করবেন


87

হাই আমি সেখানে বেশ কয়েকটি কৌণিক.জেএস ভিডিও দেখেছিলাম এবং দেখেছি যে মান () পদ্ধতিটি এক ধরণের মডিউল-ওয়াইড ধ্রুবক সেট করতে ব্যবহৃত হয়েছিল। উদাহরণস্বরূপ, কেউ এঙ্গুলার-ইউআই লাইব্রেরির কনফিগারেশন সেট করতে পারে: (কফিসিপি)

angular.module('app',[])
.value "ui.config", 
  tinymce:
    theme: 'simple'
    width: '500'
    height: '300'

এবং আমার অ্যাপ্লিকেশনটি বর্তমানে এটির মতো দেখাচ্ছে:

window.app = angular.module("app", [ 'ui'])

.config(["$routeProvider", ($routeProvider) ->
  $routeProvider
  .when "/users",
    templateUrl: "assets/templates/users/index.html"
    controller: IndexUsersCtrl

  .otherwise redirectTo: "/users"

])

.value 'csrf', $('meta[name="csrf-token"]').attr('content') #<---- attention here

IndexUsersCtrl = ($scope) ->
  $scope.users = gon.rabl
  console.log "I want to log the csrf value here" #<---- then attention
IndexUsersCtrl.$inject = ['$scope']

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

আমি এখানে এসটি এবং এংুলারজসের গুগল গ্রুপে পড়েছি যে বিটিডব্লিউ কন্ট্রোলারগুলির সাধারণ কোডগুলি ভাগ করার একটি উপায় একটি পরিষেবার মাধ্যমে হয়, এই ধারণাটিও কি এখানে প্রয়োগ করা হবে?

ধন্যবাদ!


4
আপনি সচেতন না হলে, $ http পরিষেবাটিতে কিছু সিএসআরএফ ক্ষমতা রয়েছে। "ক্রস সাইটের অনুরোধ জালিয়াতি (এক্সএসআরএফ) সুরক্ষা" বিভাগটি
মার্ক রাজকক

উত্তর:


147

Module.value(key, value)একটি সম্পাদনযোগ্য মান ইনজেকশনের জন্য ব্যবহৃত হয়, Module.constant(key, value)একটি ধ্রুবক মান ইনজেকশনের জন্য ব্যবহৃত হয়

উভয়ের মধ্যে পার্থক্য এতটা নয় যে আপনি "একটি ধ্রুবক সম্পাদনা করতে পারবেন না", এটি আরও বেশি you আপনি কিছু সরবরাহ এবং ইনজেকশন দিয়ে ধ্রুবককে বাধা দিতে পারবেন না।

// define a value
app.value('myThing', 'weee');

// define a constant
app.constant('myConst', 'blah');

// use it in a service
app.factory('myService', ['myThing', 'myConst', function(myThing, myConst){
   return {
       whatsMyThing: function() { 
          return myThing; //weee
       },
       getMyConst: function () {
          return myConst; //blah
       }
   };
}]);

// use it in a controller
app.controller('someController', ['$scope', 'myThing', 'myConst', 
    function($scope, myThing, myConst) {
        $scope.foo = myThing; //weee
        $scope.bar = myConst; //blah
    });

4
'মাই সার্ভিস' টোকন কীভাবে ছবির সাথে খাপ খায়?
ডেভ এডেলহার্ট

4
@ ডেভএডেলহার্ট, দুঃখিত আমি আপনার প্রশ্নটি আগে দেখিনি। মানটি ব্যবহার করে এমন একটি পরিষেবার উদাহরণ হিসাবে আমি এটি সেখানে রেখেছিলাম। ভাগ্যক্রমে, পাভেল হ্লোবিল একজন ভাল শমরীয়ান এবং সেটিকে আরও পরিষ্কার করার জন্য তিনি আমার কোডটিতে কিছু টীকা যুক্ত করেছিলেন।
বেন লেশ

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

4
তবে ধ্রুবকগুলি পরিবর্তনযোগ্য নয়। আপনি কেবল তাদের অন্য ইঞ্জেকশন দিয়ে ওভাররাইট করতে পারবেন না কারণ সরবরাহগুলি তাদের সাজসজ্জার জন্য বাধা দেয় না।
বেন লেশ

4
আমি জানি এটি একটি পুরানো উত্তর, তবে "মডিউল.ভ্যালু (কী, মান) একটি সম্পাদনযোগ্য মান ইনজেকশনের জন্য ব্যবহৃত হয়, একটি ধ্রুবক মান ইনজেক্ট করতে Module.constant (কী, মান) ব্যবহৃত হয়" এর সাথে এনজি এর সাথে তাল মিলবে না সর্বশেষ অবতার (1.3.4)। মডিউল.ভেলু () এবং মডিউল.কমস্ট্যান্ট () এর মধ্যে পার্থক্যটি হ'ল: আপনার অ্যাপ্লিকেশনটির জীবনকাল (কনফিগারেশন এবং রান চলাকালীন) আগে একটি ধ্রুবক () পাওয়া যায়; মান () কেবল রান চলাকালীন উপলব্ধ। সেগুলি পরিবর্তনযোগ্য, এবং যেখানে পরিবর্তিত মানগুলি দৃশ্যমান হোক না কেন, তাদের মানের কাঠামোর উপর নির্ভর করে (আদিম বা না)। docs.angularjs.org/guide/providers#constant-recipe
lukkea

4

আমি সম্প্রতি পরীক্ষার অভ্যন্তরে কার্মার সাথে এই বৈশিষ্ট্যটি ব্যবহার করতে চেয়েছিলাম। যেমনটি ড্যান ডায়ন কীটি দেখিয়েছেন তা হ'ল আপনি কোনও নিয়ামক, পরিষেবা ইত্যাদির মতোই কোনও মান সঞ্চার করতে পারবেন many

myvalues.js এর মধ্যে একটি ফাইল রয়েছে যা নিশ্চিত করুন - এটি আপনার কর্মফলের ফাইলের অন্তর্ভুক্ত রয়েছে make

var myConstantsModule = angular.module('test.models', []);
myConstantModule.value('dataitem', 'thedata');
// or something like this if needed
myConstantModule.value('theitems', [                                                                                                                                                                                                             
  {name: 'Item 1'},                                                                                                                                                                                                                         
  {name: 'Item 2'},                                                                                                                                                                                                                         
  {name: 'Item 3'}
]);                                                                                                                                                                                                                         

]);

টেস্ট / স্পেস / মাইস্টেস্ট.জেএস - সম্ভবত এটি কার্ম দ্বারা লোড করা জেসমিন স্পেক ফাইল

describe('my model', function() {
    var theValue;
    var theArray;
    beforeEach(module('test.models'));
    beforeEach(inject(function(dataitem,theitems) {
      // note that dataitem is just available
      // after calling module('test.models')
      theValue = dataitem;
      theArray = theitems;
    });
    it('should do something',function() {
      // now you can use the value in your tests as needed
      console.log("The value is " + theValue);
      console.log("The array is " + theArray);
    });
});

2

আপনাকে csrfআপনার নিয়ামকের মধ্যে উল্লেখ করতে হবে toIndexUsersCtrl = ( $scope, csrf )

IndexUsersCtrl.$inject = [ '$scope', 'csrf' ]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.