2013-08-02 14 views
18

के साथ राज्य की रक्षा करें मेरे पास एक एनजी-व्यू वाला ऐप है जो संपर्क सूची से चुने गए संपर्कों के लिए ईमेल भेजता है। जब उपयोगकर्ता "प्राप्तकर्ता" चुनते हैं तो यह एक और दृश्य/पृष्ठ दिखाता है जहां वह खोज, फ़िल्टर इत्यादि दिखा सकता है। "ईमेल भेजें" और "संपर्क सूची" विभिन्न HTML आंशिक हैं जो एनजी-व्यू में लोड होते हैं।कोणीय यूआई-राउटर

मुझे प्रेषण फ़ॉर्म स्थिति रखने की आवश्यकता है ताकि उपयोगकर्ता संपर्क सूची से किसी को चुन सकें, यह उसी बिंदु (और एक ही स्थिति) पर लौटता है। मैंने अलग-अलग समाधानों ($ रूटस्कोप, एनजी-शो का उपयोग करके छुपा divs ...) के बारे में पढ़ा है, लेकिन मैं जानना चाहता हूं कि यूआई-राउटर मेरे राज्य प्रबंधक के साथ मेरी मदद करेगा या नहीं। यदि नहीं, तो क्या अन्य उपयोग में आसान समाधान हैं?

धन्यवाद!

+0

संभव डुप्लिकेट [AngularJS - मार्गों के बीच डेटा की बचत] (http:

(function(){ 'use strict'; angular.module('app').service('StateService', function(){ var _states = {}; var _save = function(name, scope, fields){ if(!_states[name]) _states[name] = {}; for(var i=0; i<fields.length; i++){ _states[name][fields[i]] = scope[fields[i]]; } } var _load = function(name, scope, fields){ if(!_states[name]) return scope; for(var i=0; i<fields.length; i++){ if(typeof _states[name][fields[i]] !== 'undefined') scope[fields[i]] = _states[name][fields[i]]; } return scope; } // ===== Return exposed functions ===== // return({ save: _save, load: _load }); }); })(); 

इसके इस्तेमाल के लिये मैं इस तरह मेरी नियंत्रक के अंत में कुछ कोड डाल//stackoverflow.com/questions/16802857/angularjs-saving-data-between-routes) –

उत्तर

21

जिस समाधान के साथ मैं गया हूं वह मेरे डेटा/मॉडल स्टोरेज के रूप में सेवाओं का उपयोग कर रहा है। वे नियंत्रक परिवर्तनों में रहते हैं।

उदाहरण

उपयोगकर्ता सेवा (हमारे मॉडल है कि नियंत्रक परिवर्तन भर बनी रहती है)

app.factory('userModel', [function() { 
    return { 
     model: { 
      name: '', 
      email: '' 
     } 
    }; 
}]); 

एक नियंत्रक में इसका उपयोग करने

function userCtrl($scope, userModel) { 
    $scope.user = userModel; 
} 

इस के अन्य लाभ यह है कि आप पुन: उपयोग कर सकते हैं आपका मॉडल अन्य नियंत्रकों में बस इतना आसान है।

+0

मैंने उपयोग की जाने वाली सेवाओं को हटा दिया। यह ठीक लग रहा है। लेकिन क्या होगा अगर मॉडल पैरामीटर पैरामीटर के आधार पर बनाया गया है (उदाहरण: $ routParams.myId)? –

+2

आप परिणामों को नियंत्रक की बजाय सेवा में स्टोर करेंगे। बाकी सब कुछ एक ही हो सकता है – Anton

+2

ऐसा प्रतीत होता है कि आपका उदाहरण अपूर्ण है, आपको [प्रसारण] (http://onehungrymind.com/angularjs-communicating-between-controllers/) के अन्य तरीकों से आपके सेवा मॉडल में परिवर्तनों के लिए एक तरीका चाहिए। [यह उदाहरण] (http://stackoverflow.com/a/16559855/168815) ऐप से पूरी तरह से नेविगेट करते समय भी राज्य को सहेजने के लिए खाते हैं। –

2

मुझे इस परिदृश्य के लिए Angular-Multi-View मिला है। यह आपको एक दृश्य में राज्य को संरक्षित करने देता है जबकि अन्य विचार मार्ग को संभालने में सक्षम होते हैं। यह कई विचारों को एक ही मार्ग को संभालने देता है।

आप इसे यूआई-राउटर के साथ कर सकते हैं लेकिन आपको उन विचारों को घोंसला करने की आवश्यकता होगी जो आईएमएचओ बदसूरत हो सकते हैं।

8

मुझे यकीन नहीं है कि यह अनुशंसित है या नहीं, लेकिन मैंने अपने नियंत्रकों के स्कोप से गुणों को सहेजने/लोड करने के लिए एक राज्य सेवा बनाई है। यह इस तरह दिखता है:

angular.module('app').controller('ExampleCtrl', ['$scope', 'StateService', function ($scope, StateService) { 
    $scope.keyword = ''; 
    $scope.people = []; 

    ... 

    var saveStateFields = ['keyword','people']; 
    $scope = StateService.load('ExampleCtrl', $scope, saveStateFields); 
    $scope.$on('$destroy', function() { 
     StateService.save('ExampleCtrl', $scope, saveStateFields); 
    }); 
}]); 
की
+0

मेरे लिए एक संभावित समाधान प्रतीत होता है। क्या आपने इस प्रक्रिया के साथ सफलता प्राप्त की है? अब मुझे राज्य को संरक्षित करने के लिए एक तंत्र को लागू करने की आवश्यकता है। ग्रीट्स मारियो – SQueek

+1

मैंने इसे एक उत्पादन ऐप में उपयोग नहीं किया है, लेकिन मेरा इन-डेवलपमेंट ऐप इस कोड का उपयोग कर रहा है और यह बहुत अच्छी तरह से काम करता है। –

+0

सुपर जॉब जस्टिन! मेरा सहयोगी समाधान से खुश है! आशा है आपका एक अच्छा सप्ताहांत हो। – SQueek