我有一个路由器,当我转到网址时运行我的控制器:#/create
。我已经像这样配置了它:
$routeProvider
.when("/create", {
templateUrl: "templates/create",
resolve: {
form: function () {
return { fields: [] };
}
},
controller: "createController"
})
在这个控制器中,我在我的服务中异步加载了一些我的组件,并将它分配给相应的scope属性。
.controller(function ($scope, service /* other components */) {
// code
console.log($scope); // sometimes it gives $rootScope
service.get().load([["forms"]], $scope); // the reaso I am passing the scope is that my service could assign loaded data to it
})
有时当我刷新页面时,我已经请求了模块,但是我没有将它们分配给范围。经过大量调试后我发现了问题。我在编译模板时遇到麻烦而不是$scope
我得到$rootScope
,所以我将模块分配给其他/不正确的范围。这里的问题是,如何在编译范围后运行我的控制器代码?
答案 0 :(得分:1)
你永远不应该有$ rootScope而不是控制器范围。我认为没有正确配置。你应该检查一下:
另一方面,您不应该为您的服务提供$ scope。最好使用回调。
您可以相应地更改控制器:
/* resolve values should be inject */
.controller("createController", function ($scope, service, form) {
$scope.form = form;
service.get().load(function(value) {
$scope.someValues = value;
});
})
答案 1 :(得分:0)
您应该使用承诺来解析您的数据。当您调用服务器获取数据时,它是一个异步操作。通常,服务返回承诺。您在解决承诺时分配数据。
service.get().success( function(data,status,headers){
$scope.something = data;
});