কীভাবে বর্তমান অবস্থা পুনরায় লোড করবেন?


333

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

আমার কাছে 3 টি রাষ্ট্রীয় স্তর রয়েছে: ডিরেক্টরি.অরগানাইজেশন.ডেটেল

ডিরেক্টরি .organisations প্রতিষ্ঠানের তালিকা সহ একটি টেবিল রয়েছে। টেবিলের কোনও আইটেমে ক্লিক করা ডিরেক্টরিটি লোড করে ডিরেক্টরি.অরগানাইজেশনস d বিবরণ with স্টেটপ্যারামস আইটেমটির আইডি পাস করে। সুতরাং বিশদ বিবরণীতে আমি এই আইটেমটির জন্য বিশদগুলি লোড করি, সেগুলি সম্পাদনা করি এবং তারপরে ডেটা সংরক্ষণ করি। এখন পর্যন্ত সব ঠিক আছে।

এখন আমার এই অবস্থাটি পুনরায় লোড করা এবং সমস্ত ডেটা রিফ্রেশ করা দরকার।

আমি চেষ্টা করেছি:

 $state.transitionTo('directory.organisations');

যা প্যারেন্ট স্টেটে যায় তবে কন্ট্রোলারটি পুনরায় লোড করে না, আমি অনুমান করি কারণ পথটি পরিবর্তন হয়নি। আদর্শভাবে আমি কেবল ডিরেক্টরি.অরগানাইজেশনস.ডিটেলস স্টেটে থাকতে চাই এবং পিতামাতার সমস্ত ডেটাও রিফ্রেশ করতে চাই।

আমি চেষ্টাও করেছি:

$state.reload()

আমি এটিকে W state.reload "এর জন্য API WIKI- তে দেখেছি (কন্ট্রোলারদের সাথে বাগ এখনই পুনরুদ্ধার করছে, শীঘ্রই ঠিক করা হচ্ছে)"।

কোন সাহায্য প্রশংসা হবে?


7
আমি এটি নিম্নরূপে সমাধান করেছি:। State.transitionTo (.c state.current, $ stateParams, {পুনরায় লোড: সত্য, উত্তরাধিকারী: মিথ্যা, বিজ্ঞপ্তি: সত্য});
হল্যান্ড রিসলে

1
এই কোডটি কোথায় যুক্ত করবেন?
মনোজ জি

বাগ ঠিক আছে এখনই? github.com/angular-ui/ui-router/wiki/…
jchnxu

কোডটি কোথায় যুক্ত করা উচিত $state.transitionTo($state.current, $stateParams, {reload:true, inherit:false})? আমার রাজ্যগুলির পুনরায় লোডের সাথে একই সমস্যাটি থাকা সমস্ত ডেটা হারাচ্ছে।
ইভান বার্বিজ

উত্তর:


565

আমি এটি ইউআই-রাউটারের সাথে রিফ্রেশ করার সবচেয়ে সংক্ষিপ্ত কাজের উপায় বলে মনে করেছি:

$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams

নতুন সংস্করণগুলির জন্য আপডেট করুন :

$state.reload();

এটির জন্য একটি নাম

$state.transitionTo($state.current, $stateParams, { 
  reload: true, inherit: false, notify: true
});

ডকুমেন্টেশন: https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state# মেমোডস_ রিলোড


21
সম্ভবত লক্ষণীয় যে এগুলির কোনওটিই পৃষ্ঠাটি পুনরায় লোডও করে না। আপনি যদি রাষ্ট্র এবং পৃষ্ঠাটি পুনরায় লোড করতে চান তবে ui-routerএটির কোনও পদ্ধতি নেই বলে আমি মনে করি। কি window.location.reload(true)
সিম্পলজি

15
@ সিম্পলএশকোল্ড আপনি যদি এটি সম্পর্কে আরও কৌনিক হতে চান তবে আপনি করতে পারেন $window.location.reload();। যদিও এটি সামান্য ওভারকিল বলে মনে হচ্ছে এটি টেস্টিং / উপহাস / সমস্ত নির্ভরতাগুলি জেনে এক কোডের টুকরোগুলি কিছুটা সহজ করতে পারে।
এজেডস

1
শুধু কৌতূহলী, ".c state.c موجودہ" এর অর্থ কী? আমি ইউআই-রাউটারের এপিআই তে পরিষ্কার ব্যাখ্যা দেখতে পাচ্ছি না, কোনও সাহায্য প্রশংসা করা হবে, ধন্যবাদ!
ব্যবহারকারী 2499325

3
@ ব্যবহারকারী 2499325: $ state.c موجودہ আপনার কাছে থাকা সমস্ত ডেটা যুক্ত করে একটি অবজেক্ট ফেরত সরবরাহ করে: সরবরাহকারী: `` `{url:" / place /: placeId ", নিয়ামক:" নিউপ্লেসকন্ট্রোলার ", নিয়ামক:" প্লেসভিএম ", টেম্পলেটআরল:" স্থানগুলি /new.pl/new.place.details.html ", নাম:" সূচি.প্লেস.প্লেস বিবরণ "}` ``
জ্যাভিয়ার হ্যানিকাউট

1
আপনি যদি ইতিমধ্যে যেমন পরামিতিগুলি লোড করে থাকেন তবে আপনি P P replace stateParams এর সাথে প্রতিস্থাপন করতে পারেন:। State.go ($ state.current, $ stateParams, {পুনরায় লোড করুন: সত্য});
tsuz

154

এই সমাধানটি AngularJS V.1.2.2 এ কাজ করে:

$state.transitionTo($state.current, $stateParams, {
    reload: true,
    inherit: false,
    notify: true
});

8
আপনি এটি কোথায় যুক্ত করবেন যাতে এটি অসীম লুপের কারণ না হয়?
पथসোফডিজাইন

5
এটি কি resolveরাজ্যের আইটেমগুলিকে পুনরায় সমাধান করবে ?
TheSharpieOne

7
এছাড়াও, আপনি যদি সেই কলটিকে $ state.params এ পরিবর্তন করেন তবে আপনাকে $ stateParams ইনজেকশন করতে হবে না
জেফ

4
বর্তমানের সর্বোচ্চ ভোট দেওয়া উত্তরের চেয়ে অনেক ভাল কাজ করে, পৃষ্ঠাটি আসলে পৃষ্ঠাটি পুনরায় লোড করে। আপনার যদি অসীম লুপের সমস্যা থাকে তবে আপনার পুনরায় লোড সম্ভবত ভুল জায়গায় রয়েছে is আমি এটি কেবল একটি বোতাম ক্লিকে ব্যবহার করছি
ড্যান

2
@ মনোজজির জন্য কিছুটা দেরি হলেও আপনি এই কোডটি যে কোনও জায়গায় রেখে দেবেন যেখানে আপনাকে পুনরায় লোড করার দরকার পড়বে - সম্ভবত কোনও এনজি-ক্লিক নির্দেশিকা কার্য বা অন্য ইভেন্টে। এটি প্রতিটি পৃষ্ঠার লোডে স্পষ্ট কারণে করা উচিত নয় (অসীম লুপ)
চালিত

68

এটিই চূড়ান্ত সমাধান হবে। (@ হোলান_ রিসলির পোস্ট দ্বারা অনুপ্রাণিত)

'use strict';

angular.module('app')

.config(function($provide) {
    $provide.decorator('$state', function($delegate, $stateParams) {
        $delegate.forceReload = function() {
            return $delegate.go($delegate.current, $stateParams, {
                reload: true,
                inherit: false,
                notify: true
            });
        };
        return $delegate;
    });
});

এখন, যখনই আপনাকে পুনরায় লোড করতে হবে, কেবল কল করুন:

$state.forceReload();

6
মৃত্যুর লুপ লুপ
সিএস

6
মনে হচ্ছে আপনার কোথাও একটি ইন্টারসেপটর রয়েছে যা ট্রিগার হয়ে যায়। আমি এই সমাধানটি বেশ কয়েকবার পরীক্ষা করেছি এবং এটি ভাল কাজ করে।
এমকে

2
@ এমকে এই নোটের জন্য আপনাকে ধন্যবাদ। এটি আমার নিজের, বিভিন্ন সমস্যার সমাধানের দিকে পরিচালিত করেছিল। আমার অনুরোধগুলি কেন দ্বিগুণ হচ্ছে, তারপরে আমি কয়েক ঘন্টা ব্যয় করেছি এবং এগুলি দ্বিগুণ হয়ে গেছে এবং এটি সমস্তই একটি ইন্টারসেপ্টারের কারণে হয়েছিল ( github.com/witoldsz/angular-http-auth )।
ম্যাকিয়েজ গুরবান

57

আয়নিক কাঠামোর জন্য

$state.transitionTo($state.current, $state.$current.params, { reload: true, inherit: true, notify: true });//reload

$stateProvider.
  state('home', {
    url: '/',
    cache: false, //required

https://github.com/angular-ui/ui-router/issues/582


আমার পক্ষে কাজ করে যেখানে $state.goএকটি নতুন অবস্থানে পুনর্নির্দেশ করতে ব্যর্থ। ধন্যবাদ @ রউর আমার দিন বাঁচিয়েছে
গিলাইম উউইপ

আমি মনে করি $ state.go প্রতিস্থাপন করুন। State.transitionTo দিয়ে। সুতরাং আপনি যেখানেই ডেকেছিলেন $ state.go, কেবল এটি প্রতিস্থাপন করুন। এটি $ state.transitionTo ('ট্যাব-নাম', {কী: মান}, {পুনরায় লোড: সত্য, উত্তরাধিকারী: সত্য, অবহিত করুন: সত্য like
বিল পোপ

2
ক্যাশে: মিথ্যা কৌতুক করে .. কিন্তু এটি কতটা প্রভাবিত করে পারফরম্যান্সকে?
ফ্রিএইচএমএমন

রাষ্ট্র পরিবর্তন করুন $ state.transition সহ রাষ্ট্র পরিবর্তন করুন এবং @ মনোজজি পুনরায় লোড করুন
গ্যারি

আমি ব্যবহার করতে কিছু নতুন লাইব্রেরি অন্তর্ভুক্ত আছে $state? আমি আয়নিক 1.4.0 চালাচ্ছি, কৌণিক 1.5.3
জোসিনালভো

45

সম্ভবত ক্লিনারটি নিম্নলিখিত হবে:

<a data-ui-sref="directory.organisations.details" data-ui-sref-opts="{reload: true}">Details State</a>

আমরা কেবল এইচটিএমএল থেকে রাষ্ট্রটি পুনরায় লোড করতে পারি।


7
আপনি পুরো পৃষ্ঠাটি পুনরায় লোড করা এড়াতে ui-sref-opts = "{পুনরায় লোড করুন: 'চাইল্ড.স্টেট' use" ব্যবহার করতে পারেন, যেখানে 'চাইল্ড.স্টেট' আপনার প্রকৃত অবস্থার প্রতিনিধিত্বকারী একটি স্ট্রিং।
মাইকেল ফুলটন

21

@ হল্যান্ড রিসলের উত্তর এখন সর্বশেষ ইউআই রাউটারে এপিআই হিসাবে উপলব্ধ।

$state.reload();

এমন একটি পদ্ধতি যা জোর করে বর্তমান অবস্থা পুনরায় লোড করে। সমস্ত সমাধানগুলি পুনরায় সমাধান করা হয়, নিয়ন্ত্রকরা পুনর্বহাল হয় এবং ইভেন্টগুলি পুনরায় গুলি চালানো হয়।

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state




7

আপনি যদি নিজের পুরো পৃষ্ঠাটি পুনরায় লোড করতে চান তবে মনে হয় ঠিক আপনার নিয়ামকটিতে ইনজেকশন $ উইন্ডো এবং তারপরে কল করুন

$window.location.href = '/';

তবে আপনি যদি কেবলমাত্র আপনার বর্তমান দর্শনটি পুনরায় লোড করতে চান, ইনজেকশন $ স্কোপ, $ রাষ্ট্র এবং $ স্টেটপ্যারামস (কেবলমাত্র যদি আপনার এই আসন্ন পুনরায় লোডে কিছু পরামিতি পরিবর্তন করতে হয় তবে আপনার পৃষ্ঠা নম্বরের মতো কিছু), তবে যেকোনটির মধ্যে এটিকে কল করুন নিয়ামক পদ্ধতি:

$stateParams.page = 1;
$state.reload();

কৌণিক জেএস ভি 1.3.15 কৌণিক-ইউআই-রাউটার ভি0.2.15


6

বোকা কাজ যে সর্বদা কার্যকর।

$state.go("otherState").then(function(){
     $state.go("wantedState")
});

3

কৌণিক v1.2.26 এর জন্য, উপরের কোনওটিই কাজ করে না। উপরের পদ্ধতিগুলিকে কল করে এমন একটি এনজি-ক্লিককে রাষ্ট্রটিকে পুনরায় লোড করার জন্য দুবার ক্লিক করতে হবে ।

তাই আমি টাইমআউট ব্যবহার করে 2 টি ক্লিকের অনুকরণ শেষ করেছি।

$provide.decorator('$state',
        ["$delegate", "$stateParams", '$timeout', function ($delegate, $stateParams, $timeout) {
            $delegate.forceReload = function () {
                var reload = function () {
                    $delegate.transitionTo($delegate.current, angular.copy($stateParams), {
                        reload: true,
                        inherit: true,
                        notify: true
                    })
                };
                reload();
                $timeout(reload, 100);
            };
            return $delegate;
        }]);

নেভিগেশন.রেলোড () এর জন্য কৌনিক 1.3.0-rc0 সহ দুটি ক্লিক প্রয়োজন, তবে ট্রানজিশনটো () খুব ভাল কাজ করেছে। আপনার যদি এই সমস্যাটি থাকে তবে আপগ্রেড করার চেষ্টা করুন
চালিত

3

আমার জন্য সবকিছু ব্যর্থ হয়েছে। কেবলমাত্র যা কাজ করেছিল ... তা সেই দৃশ্যে ক্যাশে-ভিউ = "মিথ্যা" যুক্ত করছে যা আমি এটিতে যাওয়ার পরে পুনরায় লোড করতে চাই।

এই সমস্যাটি থেকে https://github.com/angular-ui/ui-router/issues/582


3
আপনার যুক্ত করা উচিত যে এটি
আয়নিকের

3

নিশ্চিত না কেন এগুলির কোনওটিই আমার পক্ষে কাজ করে নি বলে মনে হয়; অবশেষে এটিই হ'ল:

$state.reload($state.current.name);

এটি ছিল কৌনিক 1.4.0 এর সাথে


2

আমার একাধিক নেস্টেড ভিউ ছিল এবং লক্ষ্য ছিল বিষয়বস্তুতে কেবল একটিকে পুনরায় লোড করা। আমি বিভিন্ন পদ্ধতির চেষ্টা করেছি তবে আমার পক্ষে কাজ করা একমাত্র জিনিস:

//to reload
$stateParams.reload = !$stateParams.reload; //flip value of reload param
$state.go($state.current, $stateParams);

//state config
$stateProvider
  .state('app.dashboard', {
    url: '/',
    templateUrl: 'app/components/dashboard/dashboard.tmpl.html',
    controller: 'DashboardController',
    controllerAs: 'vm',
    params: {reload: false} //add reload param to a view you want to reload
  });

এই ক্ষেত্রে কেবলমাত্র প্রয়োজনীয় ভিউ পুনরায় লোড করা হবে এবং ক্যাশিং এখনও কাজ করবে।


সত্য বা মিথ্যা পুনরায় লোড করুন, আপনি মিথ্যা হিসাবে উল্লেখ করেছেন। মিথ্যা সর্বশেষ পরিবর্তনগুলি সহ সামগ্রী পুনরায় লোড করবে?
কানাগুলি

2

আমি জানি অনেক গুলো উত্তর এসেছে কিন্তু পুরো পৃষ্ঠা রিফ্রেশ না করেই এটি করার সবচেয়ে ভাল উপায় হ'ল আমি যে রুটে রিফ্রেশ করতে চাই সেই রুটে একটি ডামি প্যারামিটার তৈরি করা এবং তারপরে যখন আমি যে রুটটি আমি পাস করি তখন কল করি is ডামি প্যারামটারে এলোমেলো সংখ্যা।

            .state("coverage.check.response", {
                params: { coverageResponse: null, coverageResponseId: 0, updater: 1 },
                views: {
                    "coverageResponse": {
                        templateUrl: "/Scripts/app/coverage/templates/coverageResponse.html",
                        controller: "coverageResponseController",
                        controllerAs: "vm"
                    }
                }
            })

এবং তারপরে সেই রুটে কল

$state.go("coverage.check.response", { coverageResponse: coverage, updater: Math.floor(Math.random() * 100000) + 1 });

কবজির মতো কাজ করে এবং সমাধানগুলি পরিচালনা করে।


2

আপনি @ রোহানের উত্তর https://stackoverflow.com/a/23609343/3297761 ব্যবহার করতে পারেন

তবে আপনি যদি কোনও ভিউ পরিবর্তনের পরে প্রতিটি নিয়ামককে রিয়েলোড করতে চান তবে আপনি ব্যবহার করতে পারেন

myApp.config(function($ionicConfigProvider) { $ionicConfigProvider.views.maxCache(0); ... }

2

আপনি যদি আয়নিক ভি 1 ব্যবহার করছেন তবে উপরের সমাধানটি কাজ করবে না কারণ আয়নিক ion আয়নিক কনফিগপ্রাইভাইডারের অংশ হিসাবে টেম্পলেট ক্যাচিং সক্ষম করেছে।

এটির জন্য প্রায় কাজ হ'ল কিছুটা হ্যাকি - আপনাকে আয়নিক.আঙ্গুলার.জেএস ফাইলটিতে ক্যাশে 0 তে সেট করতে হবে:

$ionicConfigProvider.views.maxCache(0);

1

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

  1. আপনার ডেটা পান
  2. আপনার অ্যাপ্লিকেশন কনফিগারেশনে একটি লোডিং অবস্থা তৈরি করুন
  3. আপনি যে রাজ্যে যেতে চান সেটি সংরক্ষণ করুন।
  4. আপনার অ্যাপ্লিকেশনটিতে "/ লোডিং" এ আপনার অবস্থান সেট করুন un
  5. লোডিং কন্ট্রোলারে রাউটিং প্রতিশ্রুতিটি সমাধান করুন এবং তারপরে আপনার পছন্দসই লক্ষ্যটিতে অবস্থান সেট করুন।

এটি আমার পক্ষে কাজ করেছে।

আশা করি এটা সাহায্য করবে

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