2014-05-21 7 views
9

मैं एनजी-व्यू से यूई-व्यू में माइग्रेट कर रहा हूं।एंगुलरजेएस: यूई-राउटर सफलता पर रीडायरेक्ट दृश्य और नई सामग्री के साथ स्कोप रीफ्रेश करें

मेरे नियंत्रक में, सफल बनाने/अपडेट/हटाए जाने पर, मैं नए अपडेट/निर्मित/हटाए गए डेटा के साथ एक इंडेक्स व्यू पर रीडायरेक्ट करना चाहता हूं।

मैं वर्तमान में $state.go का उपयोग करके ऐसा करता हूं।

app.controller('AdminSupplierCreateController', ['$scope', '$state', 'Supplier', 
    function ($scope, $state, Supplier) { 
     $scope.h1 = "Register a new Supplier"; 

     $scope.store = function() 
     { 
      Supplier.post($scope.supplier) 
       .then(
        function() { 
         console.log("Successfully Created Supplier"); 
         $state.go('admin.supplier'); 
        }, 
        function(response) { 
         console.log("Error with status code: " + response.status); 
        } 
       ); 
     }; 
}]); 

समस्या यह है कि जब $ राज्य बदल जाता है, तो दायरा अद्यतन नहीं होता है। ऐसा लगता है कि मूल admin.supplier स्कोप डेटा रीफ्रेश नहीं किया जा रहा है।

मैंनेमें दायरे को सेट करने से पहले $state.reload() के साथ ui-view को रीफ्रेश करने का प्रयास किया है।

app.controller('AdminSupplierIndexController', ['$scope', '$state', 'suppliers', 
    function ($scope, $state, suppliers) { 
     $state.reload(); 
     $scope.suppliers = suppliers; 
}]); 

ऐसा करने से, api/v1/suppliers को पाने के अनुरोध करता है, लेकिन यह वास्तव में, जब तक कि मैं या तो ब्राउज़र पर ताज़ा बटन हिट या मैन्युअल रूप से एक अलग राज्य के लिए नेविगेट अद्यतन गुंजाइश प्रदर्शित नहीं करता है तो फिर से वापस जाएँ।

$stateProvider 
    ... 
    .state('admin.supplier', { 
     url : "/supplier", 
     templateUrl : 'templates/admin/supplier/index.html', 
     controller: "AdminSupplierIndexController", 
     resolve: { 
      suppliers: ['Supplier', function(Supplier) { 
       return Supplier.getList(); 
      }] 
     } 
    }) 
    .state('admin.supplier.create', { 
     url : "/create", 
     templateUrl : 'templates/admin/supplier/create.html', 
     controller: "AdminSupplierCreateController" 
    }) 

समाधान:

app.controller('AdminSupplierCreateController', ['$scope', '$state', 'Supplier', 
    function ($scope, $state, Supplier) { 
     $scope.h1 = "Register a new Supplier"; 

     $scope.store = function() { 
      Supplier.post($scope.supplier) 
       .then(
        function() { 
         console.log("Successfully Created Supplier"); 

              // Force Reload on changing state 
              $state.go('admin.supplier', {}, {reload: true}); 
        }, 
        function(response) { 
         console.log("Error with status code: ", response.status); 
        } 
       ); 
     }; 
}]); 

उत्तर

11

यह इसलिए होता है क्योंकि आप माता-पिता राज्य जो पहले से ही बनाई गई है करने के लिए चलते हैं। आपको यूई-राउटर को सिग्नल करना होगा जिसे आप इसे पुनः लोड करना चाहते हैं।

मुझे लगता है कि आप $state.go() के reload विकल्प की तलाश कर रहे हैं। docs का संदर्भ लें।

इसके अलावा, "इंडेक्स" स्थिति को संपादित करने की एक भाई स्थिति में स्थानांतरित करने के लिए एक प्रकार का कामकाज हो सकता है। admin.supplier.index या तो। फिर यह नष्ट हो जाएगा क्योंकि आप admin.supplier.edit में संक्रमण करते हैं और जब आप वापस संक्रमण करते हैं और फिर कोई अतिरिक्त विकल्प आवश्यक नहीं होते हैं।

एक साइड नोट के रूप में मुझे लगता है कि के बजाय का उपयोग करने के लिए यह अच्छा अभ्यास माना जाएगा।

+2

बहुत धन्यवाद। इसका उपयोग करके हल किया गया: '$ state.go ('admin.supplier', {}, {reload: true});' Supplier.post' – Gravy

+0

की सफलता कॉलबैक में यह वास्तव में मदद करता है और ठीक उसी तरह काम करता है जैसा कि मैं इसकी अपेक्षा कर रहा था सेवा मेरे। – carbontwelve

संबंधित मुद्दे