首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular $routeParams为空

Angular $routeParams为空
EN

Stack Overflow用户
提问于 2013-06-12 02:47:34
回答 7查看 18.8K关注 0票数 15

我有一个非常简单的Angular应用程序,我已经将其提炼为以下内容:

代码语言:javascript
复制
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'}
    );
}]);

和HTML:

代码语言:javascript
复制
<div ng-controller="CompanyCtrl"></div>

当我登录$routeParams时,它显示为空白。当我使用.otherwise()时,它将加载我在那里指定的任何内容。知道我错过了什么吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-06-18 02:45:50

首先,尝试使用以下命令

代码语言:javascript
复制
$locationProvider.html5Mode(true);

这应该可以修复您的启动代码。然后调整您的代码以支持非pushState浏览器。

希望这能有所帮助!

票数 9
EN

Stack Overflow用户

发布于 2013-06-18 02:37:15

您有几个错误:

  1. 您已经在视图(<div ng-controller="CompanyCtrl"></div>)和$routeProvider (.when('/company/edit/:id', {templateUrl: '/partials/edit', controller: 'CompanyCtrl'})两个地方指定了控制器。我会删除视图中的那个。
  2. 当在$routeProvider中指定控制器时,你必须在模块中注册它(无论如何你都应该这样做,最好避免全局控制器)。在使用var CompanyCtrl = function ....
  3. You服务时,执行napp.controller('CompanyCtrl', function ...而不是ng-view需要指定$route服务(不确定是否执行此操作)

新代码:

代码语言:javascript
复制
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/edit)

代码语言:javascript
复制
<div> ... </div>

和应用程序(index.html或其他什么)

代码语言:javascript
复制
... <body> <div ng-view></div> </body>

我已经创建了一个有效的柱塞示例:http://plnkr.co/edit/PQXke2d1IEJfh2BKNE23?p=preview

票数 10
EN

Stack Overflow用户

发布于 2013-06-19 03:39:09

我不确定这是否有帮助,但我自己也遇到了这个问题,我发现我无法记录路由参数,除非我有一些绑定的东西。

所以,

路由器:

代码语言:javascript
复制
var myApp = angular.module('myApp', []);
myApp.config(function($routeProvider){

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

});

控制器:

代码语言:javascript
复制
myApp.controller('ProjectCtrl', function($scope, $routeParams){
  $scope.id = $routeParams.id;
  console.log('test');
});

查看:

代码语言:javascript
复制
<h1>{{ id }}</h1>

当我从视图中删除'{{id}}‘时,没有记录任何内容,$routeParams是空的,至少在控制器实例化的时候是这样。正如上面的一些答案所指出的,路由参数是异步传入的,因此没有绑定到该属性的控制器将不会执行。所以,我不确定你的代码片段是从什么地方提炼出来的,但希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17051512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档