2013-12-17 6 views
14

मैं एक दृश्य है, जहां मैं निम्नलिखित कोड है है:

<input type="button" value="New Post" ng-click="$state.go('blog.new-post')"> 

लक्ष्य के बिना एक नए राज्य के लिए संक्रमण के लिए है href का प्रयोग करें। दुर्भाग्यवश उपरोक्त कोड आग नहीं लगाता है।

app.controller('blogPostsController', function($scope, $stateParams, $http, $state) ... 

लेकिन अभी भी कुछ नहीं:

मैं भी इस दृश्य के लिए नियंत्रक में $ राज्य शामिल करने की कोशिश की। संक्रमण भी काम नहीं कर रहा है।

किसी को भी इस काम को बनाने के बारे में कोई विचार है?

संपादित करें: मैं केवल यह बताए द्वारा काम कर सकता है:

$scope.$state = $state; 

मेरी नियंत्रक के अंदर। यह बदसूरत लगता है। दायरे को सौंपे बिना $ राज्य तक पहुंचने का कोई और तरीका नहीं है?

उत्तर

11

https://github.com/angular-ui/ui-router/wiki/Quick-Reference#note-about-using-state-within-a-template के अनुसार आप एक विशेषता ui-sref कर सकते हैं कि कहा जाता है $rootScope में जोड़ सकते हैं, तो यह और सभी कार्यक्षेत्रों में उपलब्ध हो जाएगा इसलिए सभी टेम्पलेट्स, द्वारा

angular.module("myApp").run(function ($rootScope, $state, $stateParams) { 
    $rootScope.$state = $state; 
    $rootScope.$stateParams = $stateParams; 
}); 
+2

यह आम तौर पर $ rootScope को इस तरह गुण जोड़ने के लिए बुरा व्यवहार माना जाता है। – jkjustjoshing

+3

ऐसी परिस्थिति में जहां आपको वास्तव में ऐसा कुछ चाहिए (इस स्थिति को इसकी आवश्यकता नहीं है - मेरा उत्तर देखें), एक बेहतर विकल्प है कि एक हल्का निर्देश बनाना जो एक विशेषता मान लेता है और निर्भरता के संदर्भ में $ parses । – jkjustjoshing

43

आप ui-router उपयोग कर रहे हैं

<a ui-sref="blog.new-post"></a> 

मुझे लगता है कि का उपयोग करना चाहिये और एक बटन के रूप में लिंक स्टाइल (आप ट्विटर बूटस्ट्रैप की तरह एक सीएसएस पुस्तकालय उपयोग कर रहे हैं आसानी से किया जा सकता है): इस प्रकार इस्तेमाल किया जा। फिर आपको अपने लिंक लिखते समय किसी भी जावास्क्रिप्ट के साथ गड़बड़ करने की आवश्यकता नहीं है।

आप राज्य में एक पैरामीटर पारित करने के लिए की जरूरत है, तो आप निम्न कर सकते हैं:

<a ui-sref="blog.edit-post({id: item.id})"></a> 

जहां $ scope.item एक आईडी संपत्ति आप एक URL पैरामीटर के रूप में पारित किया जा करना चाहते हैं के साथ एक वस्तु है।

+2

मेथिंक यह स्वीकार्य उत्तर होना चाहिए .. बेशक, आप इस तरह राज्य को पैरा पास नहीं कर पाएंगे। – RoyM

+3

@roymath, वास्तव में आप कर सकते हैं! उत्तर संपादित किया गया है। – jkjustjoshing

+2

धन्यवाद - यह वास्तव में अच्छा बनाता है .. मैंने जो कुछ भी महसूस किया है, उनमें से एक यह है कि आप एक यूआरएल पथ का हिस्सा बहुत सुंदर ढंग से बदल सकते हैं - यानी: अनिवार्य रूप से राज्य के भीतर नेविगेट करके। उदाहरण: आपके पास एक राज्य 'एस' के लिए एक यूआरएल है: '/ foo /: aa /: bb /: cc' यदि आप पहले से ही उस राज्य में हैं जैसे/foo/joe/झटका/चट्टानों 'और आप' झटका 'को' छः पैक 'में बदलना चाहते हैं, लेकिन बाकी को अकेला छोड़ दें, यह सिर्फ' ui-sref = "एस ({bb: 'sixpack'} होने का विषय है)" '- चिंता किए बिना अन्य पैरा के बारे में। यदि आप '$ location.path' को सीधे – RoyM

0

सरल समाधान $ विंडो सेवा और पुराने दृष्टिकोण

  1. इंजेक्षन $ खिड़की कोणीय जे एस का सेवा का उपयोग करने के लिए है।
  2. history.back() जावास्क्रिप्ट का कार्य करें।
  3. हो गया, यदि आप बस वापस जाना चाहते हैं तो यह सबसे आसान समाधान है।

मैं पूरे कोणीय जेएस नहीं लिखूंगा।केवल कोड है कि मायने रखती है:

एचटीएमएल-संहिता

<button ng-click="$ctrl.goBack()">Go Back</button> 

जे एस-संहिता

self.goBack = function(){ $window.history.back(); };

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