Angular JS:我们可以在没有定义路由的控制器上设置解析或承诺吗?
Angular JS: can we set resolve or promise on controller which did not have route defined?
我正在尝试在控制器渲染之前从服务器获取一些数据。
关于routeProvider
,我找到了很多答案。
但我的主要问题是我的控制器不受任何路由的约束。
那么有没有办法使这成为可能呢?
我有以下方面的控制器...
<!-- HERE I WANT TO BLOCK RENDERING TILL DATA GET LOAD -->
<AppController>
<ng-view>
</AppController>
听起来您
正在寻找resolve
,但是如果您没有为此控制器使用路由表,则不会有此选项。为什么不直接解决控制器中的异步调用,并在回调中设置范围变量。这就是我对等待控制器"渲染"的愿望的解释,而通过路由表的resolve
将等待控制器实例化。观察以下内容...
module.controller('ctrl', function($scope, $http) {
$http.get('/uri').then(function(response) {
// set $scope variables here
});
console.log('executed first');
});
您还可以设置一个变量,以防止在数据调用较长时呈现关联的视图。这将防止 UI "跳舞"。观察对上述示例的以下更改...
<div ng-controller="ctrl" ng-show="resolved"></div>
module.controller('ctrl', function($scope, $http) {
$http.get('/uri').then(function(response) {
$scope.resolved = true; // show rendering
});
});
JSFiddle Link - 简化演示
JSFiddle Link - demo ng-if
一个想法会起作用在 HTML 控制器中:
<p ng-if="notLoadedContent">Wait</p>
<div ng-if="!notLoadedContent">Content fetched</div>
在控制器中,所有控制器都在一个函数内,将启动所有功能,控制器将是:
fetch(init)
$scope.notLoaded = true;
function init(){
$scope.notLoaded=false;
}
希望对您有所帮助
相关文章:
- 如何从jQuery设置控制器或全局变量的属性
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 将外部控制器的范围变量设置为角度
- 设置AngularJS控制器属性不能是使用Coffeescript的最后一行
- 如何在多个控制器之间封装设置$scope值
- 在 AJAX 调用的 zend 控制器操作中正确设置会话
- 设置控制器动态角度
- AngularJS-有条件地为路由设置控制器
- 如何从路由文件中的子文件夹设置控制器文件
- 如何根据信号器请求的结果设置控制器范围
- AngularJS-设置控制器'访问DOM的自定义指令中的$scope变量
- Ember.js设置控制器属性表单组件
- 如何从控制器打开和设置控制器Mobile-Angular模态
- 使用ember试图从路由模型钩子中设置控制器中的值会产生错误
- 最好的做法是从出厂功能设置控制器范围变量
- 应用程序路由中的多个模型,如何设置控制器Ember.JS
- Jasmine:在初始化时设置控制器属性,角度为1.5
- 不能在角材质模态对话框中设置控制器属性
- 如何获取/设置控制器/模块之外的变量
- 从组件内部设置控制器属性