ठीक है, हल किया गया :) कोणीय यूआई राउटर में यह नई विधि है, $ urlRouterProvider.deferIntercept ()
https://github.com/angular-ui/ui-router/issues/64
मूल रूप से यह नीचे आता है:
angular.module('myApp', [ui.router])
.config(['$urlRouterProvider', function ($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}])
// then define the interception
.run(['$rootScope', '$urlRouter', '$location', '$state', function ($rootScope, $urlRouter, $location, $state) {
$rootScope.$on('$locationChangeSuccess', function(e, newUrl, oldUrl) {
// Prevent $urlRouter's default handler from firing
e.preventDefault();
/**
* provide conditions on when to
* sync change in $location.path() with state reload.
* I use $location and $state as examples, but
* You can do any logic
* before syncing OR stop syncing all together.
*/
if ($state.current.name !== 'main.exampleState' || newUrl === 'http://some.url' || oldUrl !=='https://another.url') {
// your stuff
$urlRouter.sync();
} else {
// don't sync
}
});
// Configures $urlRouter's listener *after* your custom listener
$urlRouter.listen();
}]);
मुझे लगता है कि यह विधि वर्तमान में केवल कोणीय यूआई रूटर के मास्टर संस्करण में शामिल है , एक वैकल्पिक मापदंडों के साथ (जो बहुत अच्छा है, बीटीडब्ल्यू)। इसे क्लोन करने और स्रोत से निर्मित करने की आवश्यकता है
grunt build
डॉक्स स्रोत से, साथ ही साथ सुलभ हैं
grunt ngdocs
(वे / साइट निर्देशिका में निर्मित) // README.MD में अधिक जानकारी
ऐसा करने का एक और तरीका लगता है, डायनेमिक पैरामीटर (जिसका मैंने उपयोग नहीं किया है)। नाेटेबले को कई क्रेडिट।
एक विचार के रूप में, यहां पर कोणीय UI रूटर के $ StateProvider में वैकल्पिक पैरामीटर दिए गए हैं, जिनका उपयोग मैंने उपरोक्त के साथ संयोजन में किया है:
angular.module('myApp').config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('main.doorsList', {
url: 'doors',
controller: DoorsListCtrl,
resolve: DoorsListCtrl.resolve,
templateUrl: '/modules/doors/doors-list.html'
})
.state('main.doorsSingle', {
url: 'doors/:doorsSingle/:doorsDetail',
params: {
// as of today, it was unclear how to define a required parameter (more below)
doorsSingle: {value: null},
doorsDetail: {value: null}
},
controller: DoorsSingleCtrl,
resolve: DoorsSingleCtrl.resolve,
templateUrl: '/modules/doors/doors-single.html'
});
}]);
वह क्या करता है यह एक राज्य को हल करने की अनुमति देता है, भले ही एक भी परमेस गायब हो। एसईओ एक उद्देश्य है, पठनीयता दूसरा।
ऊपर के उदाहरण में, मैं चाहता था कि दरवाजे एक आवश्यक पैरामीटर हो। यह स्पष्ट नहीं है कि उन्हें कैसे परिभाषित किया जाए। यह कई वैकल्पिक मापदंडों के साथ ठीक काम करता है, लेकिन वास्तव में कोई समस्या नहीं है। चर्चा यहाँ है https://github.com/angular-ui/ui-router/pull/1032#issuecomment-4946090