2013-03-14 13 views
8

मैं एक समस्या के बारे में एक दिन के लिए अटक गया हूं जिसे मैं देख नहीं सकता।

मैं एक users.js.coffee फ़ाइल में निम्न कोड है:

app = angular.module("app", ["ngResource"]) 
app.config ['$routeProvider', '$locationProvider', ($routeProvider, $locationProvider) -> 
    $locationProvider.html5Mode(true) 
    $routeProvider.when('/users/:id', {templateUrl: '/users/:id.json', controller: UserCtrl}) 
    $routeProvider.when('/users/:id/videos', {templateUrl: '/users/:id/videos.json', controller: UserCtrl}) 
] 

app.factory "User", ["$resource", ($resource) -> 
    $resource("https://stackoverflow.com/users/:id", {id: "@id"}, { 
    show: {method: "GET"}, 
    videos: {method: "GET", isArray:true} 
    }) 
] 

@UserCtrl = ["$scope", "$location", "$route", "http", "$routeParams", "User", ($scope, $location, $route, $http, $routeParams, User) -> 
    console.log($location)//LocationUrl {$$parse: function, $$compose: function, $$rewriteAppUrl: function, $$protocol: "http", $$host: "localhost"…} 

    console.log($route)//Object {routes: Object, reload: function} 
    console.log($routeParams)//Object {} 

] 

क्यों $ होगा routeParams एक खाली वस्तु हो सकता है? यदि मैं एक दृश्य में $.c.current.params को कॉल करता हूं, तो यह उचित पैरामीटर दिखाता है। लेकिन नियंत्रक में नहीं। और भी, मैं नियंत्रक में $.c.current.params को कॉल नहीं कर सकता, क्योंकि "वर्तमान" अभी तक परिभाषित नहीं है।

+0

यह आपके प्रश्न से संबंधित नहीं है, लेकिन मुझे नहीं लगता कि आप 'answer_with' का उपयोग करते समय' to_json' का उपयोग कर सकते हैं। आपको एक वस्तु प्रदान करनी है, और आपका नियंत्रक अनुरोधित प्रारूप के अनुसार उपयुक्त उत्तरदाता को कॉल करेगा। –

+0

मुझे लगता है कि आप आम तौर पर सही हैं, जब तक कि मुझे @ user.to_json जैसे किसी संगठन को शामिल करने की आवश्यकता न हो (इसमें शामिल हैं: वीडियो)। मेरे पास इसे तब तक स्पष्ट करने के लिए है जब तक कि मुझे पता न लगे कि मुझे उचित प्रतिक्रिया क्यों नहीं मिल रही है। – jflores

+0

किसी जेसन प्रतिक्रिया में एसोसिएशन को शामिल करने का पसंदीदा तरीका आपके मॉडल में 'as_json' को ओवरराइड करना है। आपकी समस्या के अनुसार, क्या आप अपने ब्राउज़र को xhr अनुरोधों को लॉग करने के लिए सेट कर सकते हैं (क्रोम इसे करता है) और यहां पोस्ट करें जो वास्तव में आगे आता है? –

उत्तर

0

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

App.controller 'UsersIndexCtrl',['$scope','$location','User', ($scope, $location, User) -> 

    $scope.users = User.query() 

    $scope.onClickHandlerToRoute = (user)-> 
    $location.path "path/to/show/user/#{user.id}" 

आप आप के रूप में http $ इंजेक्षन करने की जरूरत नहीं:

@App = angular.module('app',['ngResource']) 
    .config(['$routeProvider'], ($routeProvider) -> 
    $routeProvider 
     .when('/users', 
     templateUrl: 'users/index.html', 
     controller: 'UsersIndexCtrl') 
     .when('/users/:id', 
     templateUrl: 'users/show.html', 
     controller: 'UsersShowCtrl') 
     .otherwise(
     redirectTo: '/users' 
    )]) 

फिर, कहते हैं, अपने उपयोगकर्ताओं सूचकांक नियंत्रक शायद कैसा लगेगा पहले से ही ngResource REST abstraction का उपयोग कर रहे हैं।

7

मुझे एक ही समस्या थी। अगर एनजी-व्यू नहीं है तो रूटिंग काम नहीं करेगी। बस एनजी-व्यू आपको अपना $ रूट पैराम मिलेगा।

संबंध

1

यह $ routeParams तरह लग रहा है $ routeProvider/एनजी-व्यू के माध्यम से कराई उन लोगों में से बाहर नियंत्रकों के नियंत्रक प्रारंभ समय में उपलब्ध नहीं है। (कोणीय 1.0.8 में कम से कम)

आप उन बाहरी नियंत्रकों में मार्ग मानकों तक पहुँचने के लिए चाहते हैं तो आप $location.search().<param_name>

2

आप एक बाहरी नियंत्रक उपयोग कर रहे हैं का उपयोग एनजी-व्यू के लिए रूट नियंत्रक करने के लिए कर सकते हैं (एक टॉपबार, या पेज नियंत्रक की तरह), आपको '$ routChangeSuccess' emit संदेश की सदस्यता लेने की आवश्यकता होगी।

यदि आप प्राप्त नियंत्रक नहीं हैं तो मार्ग परिवर्तन सफलता असीमित है। यह SO उत्तर एक और पूर्ण उत्तर देता है: $routeParams is empty in main controller

लेकिन यह tldr है;

$scope.$on('$routeChangeSuccess', function() { 
    // $routeParams should be populated here 
}); 
संबंधित मुद्दे