অ্যাংুলারজেএস কন্ট্রোলারের জীবনচক্রটি কী?


199

কোনও অনুগ্রহ করে কোনও স্পষ্ট করে বলতে পারেন যে কোনও অ্যাংুলারজেএস নিয়ামকের জীবনকাল কী?

  • একটি নিয়ামক কি সিঙ্গলটন, বা তৈরি করা / চাহিদা অনুসারে ধ্বংস?
  • পরে যদি, নিয়ন্ত্রণকারীর সৃষ্টি / ধ্বংসকে ট্রিগার করে?

নীচের উদাহরণ বিবেচনা করুন:

var demoApp = angular.module('demo')
  .config(function($routeProvider, $locationProvider) {
    $routeProvider
      .when('/home', {templateUrl: '/home.html', controller: 'HomeCtrl'})
      .when('/users',{templateUrl: '/users.html', controller: 'UsersCtrl'})
      .when('/users/:userId', {templateUrl: '/userEditor.html', controller: 'UserEditorCtrl'});
  });

demoApp.controller('UserEditorCtrl', function($scope, $routeParams, UserResource) {
  $scope.user = UserResource.get({id: $routeParams.userId});
});

উদাহরণ:

উপরের উদাহরণে, আমি যখন নেভিগেট করি, তখন /users/1ব্যবহারকারী 1 লোড হয় এবং এতে সেট হয় $scope

তারপরে, আমি যখন নেভিগেট করি তখন /users/2ব্যবহারকারী 2 লোড হয়। একই উদাহরণটি UserEditorCtrlপুনরায় ব্যবহার করা হয়েছে, বা একটি নতুন উদাহরণ তৈরি হয়েছে?

  • যদি এটি একটি নতুন উদাহরণ, প্রথম ঘটনাটি ধ্বংসকে ট্রিগার করে?
  • যদি এটি পুনরায় ব্যবহার করা হয়, তবে এটি কীভাবে কাজ করবে? (যেমন, ডেটা লোড করার পদ্ধতিটি নিয়ামক তৈরির সময় চলতে দেখা যায়)

উত্তর:


227

ঠিক আছে, আসলে প্রশ্নটি একটি ngViewনিয়ামকের জীবনচক্রটি কী ।

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

আপনার নির্দিষ্ট প্রশ্নের উত্তর দেওয়া, একটি ngViewনির্দেশিকা (পাশাপাশি ngControllerনির্দেশাবলীর জন্য ) সর্বদা একটি নতুন নিয়ন্ত্রক এবং প্রতিবার কোনও নেভিগেশন হওয়ার সময় একটি নতুন সুযোগ তৈরি করবে । এবং শেষ সুযোগটিও ধ্বংস হতে চলেছে

জীবনচক্র "ইভেন্টগুলি" বেশ সহজ। আপনার "তৈরির ইভেন্ট" নিজেই আপনার নিয়ামকের তৈরি। শুধু আপনার কোড চালান। কখন এটি অকেজো হয়ে যায় ( "ধ্বংসের ইভেন্ট" ) জানতে, স্কোপ $destroyইভেন্টটি শুনুন :

$scope.$on('$destroy', function iVeBeenDismissed() {
  // say goodbye to your controller here
  // release resources, cancel request...
})

জন্য ngViewবিশেষভাবে, আপনি কি জানেন বিষয়বস্তু সুযোগ ঘটনা মাধ্যমে লোড পরার যখন সক্ষম $viewContentLoaded:

$scope.$on('$viewContentLoaded', function readyToTrick() {
  // say hello to your new content here
  // BUT NEVER TOUCHES THE DOM FROM A CONTROLLER
});

এখানে একটি প্ল্যানকার একটি ধারণার প্রমাণ সহ (আপনার কনসোল উইন্ডোটি খুলুন)।


10
আজকাল যে কোডটি $ স্কোপটি ধ্বংস করে তা github.com/angular/angular.js/blob/…বাস করে । খুব সহায়ক, ধন্যবাদ!
w00t

4
ভিউ কনট্যান্টলয়েড কেবলমাত্র তখনই কাজ করে যদি আপনি একটি টাইমআউট ব্যবহার করেন কারণ এটি টেমপ্লেট লোড হওয়ার ঠিক আগে প্রেরণ করা হয় ... ডকগুলি বিপরীতভাবে বলে, কিন্তু template: "HTML STRING"যখন এটি কোনও টেম্পলেট ফাইল থাকে তখন এটি অসম্পূর্ণতার মতো লোড হয়ে যায় তখন তারা কাঁচা থেকে রেফার করছে ।
ব্যবহারকারী 3338098
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.