我有一个看似简单的问题,没有明显的(通过阅读Angular JS文档)解决方案.
我有一个Angular JS指令,它根据其他DOM元素的高度进行一些计算,以定义DOM中容器的高度.
类似于此的东西在指令内部发生:
return function(scope, element, attrs) {
$('.main').height( $('.site-header').height() - $('.site-footer').height() );
}
Run Code Online (Sandbox Code Playgroud)
问题是,当指令运行时,$('site-header')无法找到,返回一个空数组而不是我需要的jQuery包装DOM元素.
是否有我可以在我的指令中使用的回调只在DOM加载后运行,我可以通过正常的jQuery选择器样式查询访问其他DOM元素?
我目前有一个内置路由的AngularJS应用程序,它与静态controller属性赋值完美配合.但我真正想做的是动态分配不同路径的控制器:
$routeProvider
.when("/Dashboards/:dashboardName",{
templateUrl:function(params) {
return "Dashboards/" + params.dashboardName;
//some ASP.NET MVC calls to return partial views (this part works)
}
})
Run Code Online (Sandbox Code Playgroud)
我想做的是在controller这里对我的财产做同样的事情,比如:
$routeProvider
.when("/Dashboards/:dashboardName",{
templateUrl:function(params) {
return "Dashboards/" + params.dashboardName;
//some ASP.NET MVC calls to return partial views (this part works)
},
controller: function(params) {
return params.dashboardName+"Controller"; (this part DOESN'T work)
}
})
Run Code Online (Sandbox Code Playgroud)
但似乎我得到一个错误说paramsProvider找不到
那么有什么方法可以在路由配置中动态加载我的控制器功能名称?
为了确定用户的会话是否经过身份验证,我需要在加载第一个路由之前向服务器发出$ http请求.在加载每个路由之前,身份验证服务会检查用户的状态以及路由所需的访问级别,如果用户未针对该路由进行身份验证,则会重定向到登录页面.然而,当第一次加载应用程序时,它不知道用户,因此即使他们有经过身份验证的会话,它也将始终重定向到登录页面.所以为了解决这个问题,我试图向服务器请求用户状态作为应用程序初始化的一部分.问题是显然$ http调用是异步的,那么在请求完成之前我如何阻止应用程序运行?
我对Angular和前端开发很新,所以我的问题可能是对javascript而不是Angular的误解.