2013-06-11 8 views
15

मुझे लगता है कि मैं निम्नलिखित करने के लिए आसुत किया है एक बहुत सरल कोणीय एप्लिकेशन है:

var napp = angular.module('Napp',['ngResource']); 

var CompanyCtrl = function($scope, $routeParams, $location, $resource) { 
    console.log($routeParams); 
}; 


napp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
    .when('/company/edit/:id', 
     {templateUrl: '/partials/edit', controller: 'CompanyCtrl'} 
    ); 
}]); 

और एचटीएमएल:

<div ng-controller="CompanyCtrl"></div> 

जब मैं $ routeParams प्रवेश करते है, यह आता है खाली खाली जब मैं .otherwise() का उपयोग करता हूं, तो यह जो भी मैंने निर्दिष्ट किया है वह लोड करेगा। कोई विचार क्या मैं याद कर रहा हूँ?

+1

यू देख सकते हैं कि आप में $ route.current.params.id –

+0

हो रही है कहाँ $ मार्ग है? – wesbos

+1

देखें कि यह आपकी समस्या का समाधान करता है: http: // deansofer।कॉम/पोस्ट/व्यू/14/एंगुलरजेएस-टिप्स-एंड-ट्रिक्स-अपडेटेड # रूटिंग –

उत्तर

9

पहले

$locationProvider.html5Mode(true); 

आपकी प्रारंभिक कोड ठीक करना चाहिए के साथ इस प्रयास करें। फिर गैर-pushState ब्राउज़र का समर्थन करने के लिए अपने कोड को समायोजित करें।

आशा है कि इससे मदद मिलती है!

+4

इसका उपयोग कैसे करें और कहां करें? – Sami

10

आप त्रुटियों की एक जोड़ी है:

  1. आप दो स्थानों पर नियंत्रक निर्दिष्ट किया है, दोनों (<div ng-controller="CompanyCtrl"></div>) दृश्य (.when('/company/edit/:id', {templateUrl: '/partials/edit', controller: 'CompanyCtrl'}) और $ routeProvider में। मैं दृश्य में एक को हटा दूंगा।

  2. आपको $ रूटप्रोवाइडर में निर्दिष्ट करते समय मॉड्यूल में नियंत्रक को पंजीकृत करना होगा (आपको वास्तव में ऐसा करना चाहिए, वैश्विक नियंत्रकों से बचने के लिए बेहतर है)। var CompanyCtrl = function ... के बजाय napp.controller('CompanyCtrl', function ... करें।

  3. जब आप $ मार्ग सेवा (यकीन नहीं तो आप इस या नहीं कर रहे हैं)

का उपयोग कर रहे एक ng-view निर्दिष्ट करने की आवश्यकता नए कोड:

var napp = angular.module('Napp', ['ngResource']); 

napp.controller('CompanyCtrl', function ($scope, $routeParams, $location, $resource) { 
    console.log($routeParams); 
}); 

napp.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider 
    .when('/company/edit/:id', 
     {templateUrl: '/partials/edit', controller: 'CompanyCtrl'} 
    ); 
}]); 

टेम्पलेट (/ parials/संपादन)

<div> ... </div> 

और एप्लिकेशन (index.html या कुछ और)

... <body> <div ng-view></div> </body> 

मैं एक काम plunker उदाहरण बना लिया है: http://plnkr.co/edit/PQXke2d1IEJfh2BKNE23?p=preview सभी की

+1

$ रूट सेवा का उपयोग करते समय एनजी-व्यू का उपयोग करना एक बड़ी बात थी जिसे मुझे समझने की आवश्यकता थी लेकिन मुझे स्पष्ट नहीं था। साथ ही मुझे कभी एहसास नहीं हुआ कि रूटिंग का उपयोग करते समय आपको केवल $ रूटप्रोवाइडर में नियंत्रक घोषित करना चाहिए और दृश्य में भी नहीं। समझ में आता है। धन्यवाद! – FireDragon

0

यह मेरे http://plunker.co/edit/ziLG1cZg8D8cYoiDcWRg?p=preview

लिए काम करता है लेकिन आप अपने कोड में कुछ त्रुटियाँ हैं:

  • आपका अपने कोड में एक ngView है लगता नहीं है। $routeProvider यह जानने के लिए ngView का उपयोग करता है कि यह टेम्पलेट की सामग्री को कहां डालना चाहिए। तो आपको इसे अपने पृष्ठ में कहीं और चाहिए।

  • आप दो स्थानों पर अपना CompanyCtrl निर्दिष्ट कर रहे हैं। आपको इसे $routeProvider में या ng-controller का उपयोग करके टेम्पलेट में निर्दिष्ट करना चाहिए। मुझे इसे टेम्पलेट में निर्दिष्ट करना पसंद है, लेकिन यह सिर्फ व्यक्तिगत वरीयता है।

  • हालांकि नहीं एक त्रुटि, आप अपने CompanyCtrl वैश्विक क्षेत्र में, Napp.controller(name, fn) उपयोग करने के बजाय अपने Napp मॉड्यूल पर यह पंजीकरण की निर्दिष्ट कर रहे हैं।

आशा है कि इससे मदद मिलती है!
आप हमेशा freenode पर #angularjs आईआरसी चैनल पर जा सकते हैं:

3

सुनिश्चित नहीं है कि यह मदद करता है, लेकिन मैं अभी इस मुद्दे पर खुद आया हूं, और पाया कि मैं मार्ग लॉग नहीं कर सका परम जब तक मैं उनके लिए कुछ बंधे थे।
तो,

रूटर:

var myApp = angular.module('myApp', []); 
myApp.config(function($routeProvider){ 

    $routeProvider.when('/projects/:id', 
    {templateUrl: '/views/projects/show.html', controller: 'ProjectCtrl'} 
); 

}); 

नियंत्रक:

myApp.controller('ProjectCtrl', function($scope, $routeParams){ 
    $scope.id = $routeParams.id; 
    console.log('test'); 
}); 

दृश्य:

<h1>{{ id }}</h1> 

जब मैं हटाया '{{आईडी}}' देखने से, कुछ भी लॉग नहीं किया गया था और $ रूट पैरामीटर कम से कम नियंत्रक के तत्काल के समय खाली था tion। जैसा कि ऊपर दिए गए कुछ उत्तरों ने इंगित किया है, मार्ग पैराम अतुल्यकालिक रूप से पारित हो जाते हैं, इसलिए उस प्रॉपर्टी के लिए कोई बाध्यकारी वाला नियंत्रक निष्पादित नहीं होगा। तो, सुनिश्चित न करें कि आपने अपनी स्निपेट को नीचे से कितना डिस्टिल्ड किया है, लेकिन उम्मीद है कि इससे मदद मिलती है!

0

क्या यह हो सकता है कि आपके templateUrl एक अवैध टेम्पलेट पर इंगित करें?

जब आप templateUrl को एक अनजान फ़ाइल में बदलते हैं, तो आप देखेंगे कि $routeParams अब पॉप्युलेट नहीं होगा (क्योंकि कोणीयजेएस टेम्पलेट को हल करते समय त्रुटि का पता लगाता है)।

मैं आपकी सुविधा है कि आप बस कॉपी और अपने आवेदन काम कर पाने के लिए पेस्ट कर सकते हैं के लिए अपने कोड के साथ काम कर रहे plnkr बनाया है: आप उदाहरण में लिंक पर क्लिक करें के रूप में जैसे ही

http://plnkr.co/edit/Yabp4c9zmDGQsUOa2epZ?p=preview

, आप कार्रवाई में राउटर देखेंगे।

आशा है कि मदद करता है!

1

यदि आप ngRoute के बजाय ui-router का उपयोग कर रहे हैं तो यह हो सकता है (ओपी के मामले में नहीं)।

यदि ऐसा है, तो $routeParams के बजाय $stateParams का उपयोग करें।

https://stackoverflow.com/a/26946824/995229

2
बेशक

यह खाली हो जाएगा। रूटपेरम्स को असीमित रूप से लोड किया जाता है ताकि आपको पैराम प्राप्त करने के लिए प्रतीक्षा करनी पड़े। अपने नियंत्रक में इस रखो:

$scope.$on('$routeChangeSuccess', function() { 
    console.log($routeParams); 
}); 
संबंधित मुद्दे