gpt4 book ai didi

javascript - 范围编译后如何运行 Controller 代码

转载 作者:行者123 更新时间:2023-12-03 07:49:32 25 4
gpt4 key购买 nike

我有一个路由器,当我转到 url:#/create 时,它会运行我的 Controller 。我已经这样配置了:

$routeProvider
.when("/create", {
templateUrl: "templates/create",
resolve: {
form: function () {
return { fields: [] };
}
},
controller: "createController"
})

在这个 Controller 中,我在服务中异步加载一些组件,并将其分配给相应的范围属性。

.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,因此我将模块分配给其他/不正确的范围。这里的问题是,编译范围后如何运行我的 Controller 代码?

最佳答案

您永远不应该使用 $rootScope 来代替 Controller 作用域。我认为有些东西配置不正确。您应该检查您是否:

  • 为您的 Controller 命名(我在您的示例中没有看到它)
  • 您的 html 代码中没有任何可以调用 Controller 的 ng-controller
  • 永远不要尝试直接在 JS 代码中创建它

另一方面,您不应该将 $scope 赋予您的服务。最好使用回调来代替。

您可以相应地更改您的 Controller :

/* resolve values should be inject */
.controller("createController", function ($scope, service, form) {
$scope.form = form;

service.get().load(function(value) {
$scope.someValues = value;
});
})

关于javascript - 范围编译后如何运行 Controller 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35057275/

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