Angular JS:我们可以在没有定义路由的控制器上设置解析或承诺吗?

Angular JS: can we set resolve or promise on controller which did not have route defined?

本文关键字:设置 控制器 承诺 路由 我们 JS 定义 Angular      更新时间:2023-09-26

我正在尝试在控制器渲染之前从服务器获取一些数据。

关于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;
}

希望对您有所帮助