সার্ভার থেকে ডেটা পাওয়ার প্রস্তাবিত উপায়


145

কোনটি ব্যবহার না করে অ্যাঙ্গুলারজেএস-এ সার্ভার ডেটা উত্সগুলিতে সংযুক্ত হওয়ার প্রস্তাবিত উপায় $resource

$resourceযেমন অনেক সীমাবদ্ধতা উপস্থিত রয়েছে:

  1. সঠিক ফিউচার ব্যবহার না করা
  2. যথেষ্ট নমনীয় হচ্ছে না

6
এই সমস্যাটি (https://github.com/angular/angular.js/issues/415) বন্ধ হয়ে গেছে বলে $ সংস্থান সঠিক ফিউচার ব্যবহার না করার সীমাবদ্ধতা এখনও সত্য কি ? (আমি কৌণিকের কাছে নতুন, যদি প্রশ্নটি বিভ্রান্তিকর হয় তবে আমার ক্ষমাপ্রার্থী -) সম্পাদনা - এই প্রতিশ্রুতি ( github.com/angular/angular.js/commit/… ) এও মনে হয় যে $ সংস্থানটির আর সেই সীমাবদ্ধতা থাকতে পারে না?
জেসন সিডেস

1
আপনার নিজের প্রশ্নের উত্তর দেওয়া এখানে আইনী ..? প্রেস, যে "আপনার জ্ঞান শেয়ার" বলা "প্রশ্ন জিজ্ঞাসা করুন"
holms

উত্তর:


229

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

angular.module('myApp').factory('Book', function($http) {
  // Book is a class which we can use for retrieving and 
  // updating data on the server
  var Book = function(data) {
    angular.extend(this, data);
  }

  // a static method to retrieve Book by ID
  Book.get = function(id) {
    return $http.get('/Book/' + id).then(function(response) {
      return new Book(response.data);
    });
  };

  // an instance method to create a new Book
  Book.prototype.create = function() {
    var book = this;
    return $http.post('/Book/', book).then(function(response) {
      book.id = response.data.id;
      return book;
    });
  }

  return Book;
});

তারপরে আপনার নিয়ামকের ভিতরে আপনি এটি করতে পারেন:

var AppController = function(Book) {
  // to create a Book
  var book = new Book();
  book.name = 'AngularJS in nutshell';
  book.create();

  // to retrieve a book
  var bookPromise = Book.get(123);
  bookPromise.then(function(b) {
    book = b;
  });
};

1
হতে পারে একটি নুব প্রশ্ন কিন্তু কীভাবে কেউ এই প্রসারিত () প্রাপ্তির জন্য অনুমতি দেয় যা কেবলমাত্র একক প্রতিক্রিয়া নয়?
নাট বুনি

2
@ নাথনবুনি, আপনি ফলাফলের মাধ্যমে লুপের উপরে আপনার স্থিতিশীল পদ্ধতি পেতে এবং বইগুলির একটি অ্যারে তৈরি করতে পারেন।
বেন লেশ

4
@ নাথনবুনি 'Book.getAll = ফাংশন () {রিটার্ন $ http.get (' / বুক ')। তারপরে (ফাংশন (প্রতিক্রিয়া) {var বই = []; এর জন্য (var i = 0; i <प्रतिक्रिया.data.length ; i ++) {books.push (নতুন বই (রেসপন্স.ডাটা [i]));} বইগুলি ফেরান;}); }; '
ইয়ায়র নেভেট

2
আপনি কীভাবে নিয়ন্ত্রণকারীদের মধ্যে একটি bookবা এর সংগ্রহ ভাগ করবেন book?
লুকাস

1
এটি দুর্দান্ত (স্পষ্টতই মিসকো কাঠামোটি তৈরি করার পরে), তবে কীভাবে এটি পুনরায় ব্যবহারযোগ্য করে তুলতে হয় তা নির্ধারণের জন্য আমি লড়াই করছি। যদি আমি কেবল একবার সিআরইউডি ফাংশন প্রয়োগ করতে চাইতাম এবং তারপরে শিশু কারখানাগুলি / পরিষেবাদিতে তাদের কার্যকারিতাটি উত্তরাধিকার সূত্রে উত্তরাধিকার সূত্রে প্রযোজ্য তবে কেবলমাত্র ইউআরএল যুক্তির প্রয়োজন (প্রোটোটাইপে সংরক্ষণ করা যাতে প্রতিটি ক্ষেত্রে urlBase এর নতুন কপির প্রয়োজন হয় না), কীভাবে হবে আমি তা করি?
ডিন স্ট্যামলার

26

আমি আপনাকে $ সংস্থান ব্যবহার করার পরামর্শ দিচ্ছি ।

এটি Angularjs এর পরবর্তী সংস্করণে (url ওভাররাইড) সমর্থন করতে পারে। তাহলে আপনি এই জাতীয় কোড করতে সক্ষম হবেন:

// need to register as a serviceName
$resource('/user/:userId', {userId:'@id'}, {
    'customActionName':    {
        url:'/user/someURI'
        method:'GET',
        params: {
            param1: '....',
            param2: '....',
        }
    },
     ....
});

এবং রিটার্ন কলব্যাকগুলি এভাবে সিটিআরএল স্কোপে পরিচালনা করা যায়।

// ctrl scope
serviceName.customActionName ({
    paramName:'param',
    ...
}, 
function (resp) {
    //handle return callback
}, 
function (error) {
    //handler error callback
});

সম্ভবত আপনি উচ্চ বিমূর্ত স্তরে কোড পরিচালনা করতে পারেন।


2
কৌণিক.জেএস এর বর্তমান সংস্করণ $ রিসোর্স মডিউলটিতে ইউআরএল ওভাররাইড সমর্থন করে।
ধন্যবাদ


11
ঈশ্বর! আমি খুব লজ্জা বোধ করছি।
ধন্যবাদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.