gpt4 book ai didi

javascript - AngularJS 加载服务然后调用 Controller 并渲染

转载 作者:行者123 更新时间:2023-12-03 03:14:17 24 4
gpt4 key购买 nike

我的问题是我需要在调用 Controller 和渲染模板之前加载服务。 http://jsfiddle.net/g75XQ/2/

HTML:

<div ng-app="app" ng-controller="root">
<h3>Do not render this before user has loaded</h3>
{{user}}
</div>

JavaScript:

angular.module('app', []).
factory('user',function($timeout,$q){
var user = {};
$timeout(function(){//Simulate a request
user.name = "Jossi";
},1000);
return user;
}).
controller('root',function($scope,user){

alert("Do not alert before user has loaded");
$scope.user = user;

});

最佳答案

您可以使用manual initialization推迟 Angular 应用程序的初始化,而不是使用 ng-app 属性自动初始化。

// define some service that has `$window` injected and read your data from it
angular.service('myService', ['$window', ($window) =>({
getData() {
return $window.myData;
}
}))

const callService = (cb) => {
$.ajax(...).success((data)=>{
window.myData = data;
cb(data)
})
}

// init angular app
angular.element(document).ready(function() {
callService(function (data) {
doSomething(data);
angular.bootstrap(document);
});
});

其中 callService 是执行 AJAX 调用并接受成功回调的函数,这将初始化 Angular 应用程序。

还要检查 ngCloak 指令,因为它可能是您需要的一切。

或者,当使用 ngRoute 时您可以使用 resolve 属性,因为您可以看到 @honkskillet 答案

关于javascript - AngularJS 加载服务然后调用 Controller 并渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657389/

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