作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序无法进行导航,但前提是我按 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/
我是一名优秀的程序员,十分优秀!