AngularJS。吴秀。在数据加载到 $scope 后显示 html
AngularJS. ng-show. Show html after data was loaded into $scope
数据插入$scope后需要显示html模板。
代码如下。上班了。
var b2buiDemo = angular.module('b2buiDemo', [...]);
b2buiDemo.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/exthtlcd', {
templateUrl: 'partials/exthtlcd-list.html',
controller: 'ExternalHotelCodeListCtrl',
resolve:{list:function(ExternalHotelCodeRestClient){
return ExternalHotelCodeRestClient.getPage();
}}
}).
otherwise({
redirectTo: '/exthtlcd'
});
}]);
b2buiDemo.run(['$rootScope', function($root) {
$root.$on('$routeChangeStart', function(e, curr, prev) {
if (curr.$$route && curr.$$route.resolve) {
// Show a loading message until promises aren't resolved
$root.loadingView = false;
console.log("HIDE");
}
});
$root.$on('$routeChangeSuccess', function(e, curr, prev) {
// Hide loading message
$root.loadingView = true;
console.log("SHOW");
});
}]);
var externalHotelCodeCtrls = angular.module('externalHotelCodeCtrls', []);
externalHotelCodeCtrls.controller('ExternalHotelCodeListCtrl',['$scope', 'list',
function($scope,list){
console.log("FILL SCOPE 1");
$scope.list=list.data;
console.log("FILL SCOPE 2");
}]);
var externalHotelCodeRestClientServices = angular.module('externalHotelCodeRestClientServices', []);
externalHotelCodeRestClientServices.factory('ExternalHotelCodeRestClient',['$http','$q',function($http,$q){
return{
getPage: function(){
var promise = $http.get('***');
promise.success(function(data){
console.log('SUCCESS');
console.log(data);
return data;
});
return promise;
}
}
}]);
exthtlcd-list.html
<div ng-show='loadingView'>...</div>
看起来一切都很好。不显示空模板。
但查看控制台输出:
隐藏 >> 成功 >> 显示 >> 填充范围 1 >> 填充范围 2
看起来 html 是在 promise 解析之后,但在数据插入范围之前显示的。可以吗?不是,怎么解决?
由于 angularjs 严格的双向绑定,这不会给您带来任何问题。事实是,当 promise 被解决时,它会立即调用回调,并显示 div。
请注意,如果您使用的是双花括号绑定,您可能会闪烁 {{youvar}} 之类的内容。为避免此问题,请改用 ng-bind。
数据插入$scope后需要显示html模板。 代码如下。上班了。
var b2buiDemo = angular.module('b2buiDemo', [...]);
b2buiDemo.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/exthtlcd', {
templateUrl: 'partials/exthtlcd-list.html',
controller: 'ExternalHotelCodeListCtrl',
resolve:{list:function(ExternalHotelCodeRestClient){
return ExternalHotelCodeRestClient.getPage();
}}
}).
otherwise({
redirectTo: '/exthtlcd'
});
}]);
b2buiDemo.run(['$rootScope', function($root) {
$root.$on('$routeChangeStart', function(e, curr, prev) {
if (curr.$$route && curr.$$route.resolve) {
// Show a loading message until promises aren't resolved
$root.loadingView = false;
console.log("HIDE");
}
});
$root.$on('$routeChangeSuccess', function(e, curr, prev) {
// Hide loading message
$root.loadingView = true;
console.log("SHOW");
});
}]);
var externalHotelCodeCtrls = angular.module('externalHotelCodeCtrls', []);
externalHotelCodeCtrls.controller('ExternalHotelCodeListCtrl',['$scope', 'list',
function($scope,list){
console.log("FILL SCOPE 1");
$scope.list=list.data;
console.log("FILL SCOPE 2");
}]);
var externalHotelCodeRestClientServices = angular.module('externalHotelCodeRestClientServices', []);
externalHotelCodeRestClientServices.factory('ExternalHotelCodeRestClient',['$http','$q',function($http,$q){
return{
getPage: function(){
var promise = $http.get('***');
promise.success(function(data){
console.log('SUCCESS');
console.log(data);
return data;
});
return promise;
}
}
}]);
exthtlcd-list.html
<div ng-show='loadingView'>...</div>
看起来一切都很好。不显示空模板。
但查看控制台输出: 隐藏 >> 成功 >> 显示 >> 填充范围 1 >> 填充范围 2
看起来 html 是在 promise 解析之后,但在数据插入范围之前显示的。可以吗?不是,怎么解决?
由于 angularjs 严格的双向绑定,这不会给您带来任何问题。事实是,当 promise 被解决时,它会立即调用回调,并显示 div。
请注意,如果您使用的是双花括号绑定,您可能会闪烁 {{youvar}} 之类的内容。为避免此问题,请改用 ng-bind。