gpt4 book ai didi

javascript - Angular.js 延迟 Controller 初始化

转载 作者:可可西里 更新时间:2023-11-01 01:32:18 25 4
gpt4 key购买 nike

我想延迟 Controller 的初始化,直到必要的数据从服务器到达。

我为 Angular 1.0.1 找到了这个解决方案:Delaying AngularJS route change until model loaded to prevent flicker , 但无法让它与 Angular 1.1.0 一起使用

模板

<script type="text/ng-template" id="/editor-tpl.html">
Editor Template {{datasets}}
</script>
<div ng-view>
</div>

JavaScript

function MyCtrl($scope) {    
$scope.datasets = "initial value";
}

MyCtrl.resolve = {
datasets : function($q, $http, $location) {
var deferred = $q.defer();

//use setTimeout instead of $http.get to simulate waiting for reply from server
setTimeout(function(){
console.log("whatever");
deferred.resolve("updated value");
}, 2000);

return deferred.promise;
}
};

var myApp = angular.module('myApp', [], function($routeProvider) {
$routeProvider.when('/', {
templateUrl: '/editor-tpl.html',
controller: MyCtrl,
resolve: MyCtrl.resolve
});
});​

http://jsfiddle.net/dTJ9N/1/

最佳答案

由于 $http 返回一个 promise ,创建您自己的 deferred 只是为了在 http 数据到达时返回 promise 会影响性能。你应该能够做到:

MyCtrl.resolve = {
datasets: function ($http) {
return $http({method: 'GET', url: '/someUrl'});
}
};

如果您需要对结果进行一些处理,请使用 .then,您的 promise 将免费链接:

MyCtrl.resolve = {
datasets: function ($http) {
return $http({method: 'GET', url: '/someUrl'})
.then (function (data) {
return frob (data);
});
}
};

关于javascript - Angular.js 延迟 Controller 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com