AngularJS:动态路由时控制器未连接到视图

时间:2015-08-11 20:44:35

标签: angularjs

所以,我猜这个问题比任何事情更具学术性。我整个下午都在MEAN堆栈应用程序的重置密码功能上工作,我选择使用的一般方法如下:

  1. 在登录视图中,用户输入用户名并单击忘记密码按钮。
  2. 这会向服务器的“忘记路由”提交一个帖子请求,以及{username:username}对象。
  3. 服务器在数据库中查找用户,如果找到,则会创建一长串随机字符(例如'823uhr8824hriij3993')并将字符串保存为用户的记忆令牌(对于小时,也会保存到期日。)
  4. 向用户发送一封电子邮件,其中包含重置密码的链接,对应于Angular路线'/reset/:token'(继续示例'/reset/823uhr8824hriij3993')。
  5. 如果用户在令牌过期之前从该URL提交更新的密码,则服务器会检查params以获取相应的记忆令牌并成功更改其密码。
  6. 我正在使用ng-Route,我的重置密码路由配置为:

    .when('/reset/:token', {
      templateUrl: 'partials/account/reset-password.html',
      controller: 'resetPasswordCtrl'
    })
    

    除非我遗漏了一些明显的(完全可能的),当用户点击'/reset/823uhr8824hriij3993'路线并且Angular呈现reset-password.html视图时,它应该连接到resetPasswordCtrl,不应该吗?

    我今天花了几个小时试图解决那些无法正常工作的用户名,密码和密码确认验证,其中很多都是在resetPasswordCtrl编码的,这意味着必定会出现一些错误导致断开连接。但实际上控制器实际上并没有连接到视图,直到我将ng-controller="resetPasswordCtrl"放在最顶层的div标签中。

    此应用程序中的所有其他路由都是静态的,并且如上所述通过$ routeProvider设置,这是我第一次遇到此问题,因此我认为它必须因为动态而出现路线的/:token部分。无论如何,我的直接问题已经解决了,但是如果有人不介意花点时间解释为什么它首先是一个问题,我会非常感激它...以供将来参考!

1 个答案:

答案 0 :(得分:0)

因为我可以看到问题是您的重置密码页面直接来自服务器,因此角度本身和您编写的路由不能在那里工作,因为所有工作都由服务器本身处理,所以如果您想要使用该功能,您应该创建一个单独的html文件,如(' reset.html'),包含所有标签以及加载应用和控制器所需的一切,然后将其指向服务器响应页面 在这种情况下,当服务器开始提供重置页面时,它会提供实际的页面