gpt4 book ai didi

javascript - Angular JS 延迟 Controller 和指令初始化,直到从服务器返回数据

转载 作者:行者123 更新时间:2023-12-01 09:28:51 25 4
gpt4 key购买 nike

我的 AngularJS 应用需要来自服务器的一些元数据,然后才能初始化 Controller 和一些指令。我有返回数据的服务,但一直无法让 Controller 和指令等待数据。

myapp.factory("db",["$http",function($http)
{
var db = {};

db.metadata = function(callback)
{
$http.jsonp("/db/?f=metadata&callback=JSON_CALLBACK").success(function(data)
{
callback(data);
}).error(function(error)
{
console.log(error);
});
}
...
return db;
}]);


var myctrl = myapp.controller("MyCtrl",["$scope","$location","db",function($scope,$location,db)
{
db.metadata(function(data)
{
$scope.metadata = data;
// initialize $scope members with $scope.metadata for directives
...
});
}]);

这显然是行不通的,因为指令会在调用 db.metadata() 返回之前尝试使用未定义的 $scope 成员进行初始化。我尝试使用 $routeProvider 解析属性:

myapp.config(["$routeProvider",function($routeProvider)
{
$routeProvider.when("/",{
templateUrl: "./myview.html",
controller: "MyCtrl",
resolve: {
metadata: ["db","$q",function(db,$q)
{
var deferred = $q.defer();

db.metadata(function(data)
{
deferred.resolve(data);
});

return deferred.promise;
}]
}
});
}]);

var myctrl = myapp.controller("MyCtrl",["$scope","$location","db","metadata",function($scope,$location,db,metadata)
{
$scope.metadata = metadata;
// initialize $scope members with $scope.metadata for directives
...
}

这不会运行,因为注入(inject)数组中“元数据”的缩小友好声明会导致 Angular 呕吐。删除声明会导致注入(inject)的元数据未定义。我做错了什么?

最佳答案

原来问题是html还有

<div ng-controller="MyCtrl">

不需要,因为“MyCtrl”已通过 $routeProvider 配置分配给 myview.html 的 Controller 。

关于javascript - Angular JS 延迟 Controller 和指令初始化,直到从服务器返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16823145/

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