【发布时间】:2014-11-03 20:13:07
【问题描述】:
我将使用 $http 和 JSON 响应从服务器获取一些数据。 $http.get() 在路由改变后被调用。但在下载数据之前模板已更改。我的目标是:
- 用户按下菜单中的超链接,更改路线,
- 显示加载微调器(DOM 元素在另一个控制器中,每次都在页面上)
- 在我的新模板中的控制器中初始化
$scope.init()(通过ng-init="init()"),这也初始化了从服务器获取数据 - 数据已下载,现在我可以隐藏微调器并更改可见模板
我该怎么做?我的应用看起来例如:
Javascript:
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', function($scope, $http) {
$scope.init = function() {
$http({method: 'GET', url: 'http://ip.jsontest.com/'}).success(function(data) {
console.log(data);
$scope.ip = data.ip;
});
}
});
myApp.config(function($routeProvider) {
$routeProvider.when('/link', {
controller: 'MyCtrl',
templateUrl: 'embeded.tpl.html'
});
});
HTML:
<script type="text/ng-template" id="embeded.tpl.html">
<div ng-controller="MyCtrl" ng-init="init()">
Your IP Address is: {{ip}}
</div>
</script>
<div>
<ul>
<li><a href="#/link">change route</a></li>
</ul>
<div ng-view></div>
</div>
【问题讨论】:
-
你看过这个帖子吗? stackoverflow.com/questions/17144180/…
-
是的,但这不是我需要的。
-
为什么不简单地在构造控制器时发送http请求,并有一个像
<div ng-show="ip">...</div>这样的视图(即在接收到数据之前它不会显示任何内容)? -
我宁愿改变页面结构。我认为 ng-view 不是最适合您的解决方案。也许您可以使用 ngInclude 来更改您需要在页面中更新的内容。 url 在您的应用程序逻辑中是否发生了重大变化?你使用一些 url 参数吗?
标签: javascript html angularjs