gpt4 book ai didi

javascript - AngularJS 应用程序仅在按 F5 时才起作用

转载 作者:行者123 更新时间:2023-11-28 19:28:15 25 4
gpt4 key购买 nike

我有一个应用程序无法进行导航,但前提是我按 F5。我的 HTML 框架:

   <html>
<head>
<script src="static/vendor/angular.js"></script>
<script src="static/js/myApplication.js"></script>
</head>
<body>
<div ng-app="myApp">
<div ng-controller="GeneralController">
...
</div>
</div>
</body>
</html>

我的Javascript框架:

angular.module('myApp',[])

.controller('GeneralController',function($scope,$http,$timeout,$sce) {

$scope.data = {};

var load = function() {
$http.get('services/loadData.php')
.success(function(res) {
$scope.data = res;
// more code
});
};
load();

// more code
});

它本来可以正常工作,但现在只有在按 F5 后才能正常工作,而无法导航。当然,它还有更多的代码和其他库,为了简洁起见,我排除了它们。页面加载后,它呈现显示括号的输出,并且不发出 $http 请求。

最佳答案

据我了解,按照代码的编写方式,load() 函数仅在创建 Controller 时运行一次。我假设 Angular 框架不会重新实例化您的 Controller 。因此,无论您导航到此 Controller 多少次,它都只会 load() 一次。我会重构你的代码。

我认为您可以使用的最佳选择是路线的 $roueProvider.resolve 函数。请参阅API documentation .

angular.module('myApp', ['ngRoute']).config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'index.html',
controller: 'GeneralController',
resolve: {
// I will load data from the server and inject it into the controller
data: function($q, $http) {
var defer = $q.defer();
$http.get('services/loadData.php').success(function(res) {
defer.resolve(res);
});
return defer.promise;
}
}
});
});

这会将 data 属性注入(inject)到您的 GeneralController 中,您可以将其绑定(bind)到其作用域。

angular.module('myApp').controller('GeneralController', function ($scope, data) {
$scope.data = data;
});

因此,每次将用户路由到您的 GeneralController 时,都会在路由导航开始时调用 'services/loadData.php'

更新:我写下了这个答案,然后意识到您没有使用ngRoute。因此,您可能可以忽略此建议。不过,我不会删除它,以防万一你这样做。 :/

关于javascript - AngularJS 应用程序仅在按 F5 时才起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409997/

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