AngularJS ui-路由器 - 视图在重新加载时消失
AngularJS ui-router - view disappears on reload
最近我开始使用ui-router
来管理我的页面状态。
我注意到,当我第一次 运行 服务器时,内容还在,但如果我浏览页面或重新加载页面,内容就会消失。
我知道 ui-router
上有一个错误可能会导致此问题。我更新了 ui-router
但错误仍然存在。
有没有人设法找到修复程序或解决它?
编辑----
我的调查让我相信它与 ui-router 无关,更多的是与应用程序完成承诺所需的时间有关。作为 jQuery
的一部分,我将在 setTimeout 上收到违规警告
所以我在上次编辑中部分正确,因此得到了这个答案; jQuery 与我的问题有关(通过使用承诺来检索数据),但它也与 ui-router 的工作方式有关:
加载页面内容时,ui-router 将使用 GET 请求提供的数据管理第一次加载(和后续重新加载)。
因为这是一个承诺,所以不能保证(尤其是当您增加数据库时)数据会及时出现以呈现页面。
为避免发生这种情况,请将解析 属性 作为 ngRoute 的一部分。 属性 允许在呈现 DOM.
之前加载所有必要的数据
如果您想了解更多信息,请关注下面的 link:
https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c
我的代码如下:
App.js
'use strict';
angular
.module('knoweeApp', ['ui.router'])
.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider) {
$stateProvider
.state('home', {
url:'/',
templateUrl: 'views/user.html',
controller: 'UserCtrl as user',
resolve: {
user: function(userFinder) {
return userFinder.getUsers();
}
}
})
.state('teacher', {
url:'/teacher/:name',
templateUrl: 'views/teacher.html',
controller: 'TeacherCtrl as teacher'
});
$urlRouterProvider.otherwise('/');
}]);
服务:userFinder
'use strict';
/**
* @ngdoc service
* @name knoweeApp.userFinder
* @description
* # userFinder
* Service in the knoweeApp.
*/
angular.module('knoweeApp')
.service('userFinder', function () {
// AngularJS will instantiate a singleton by calling "new" on this function
this.getUsers = function (){
return $.get('users.json');
};
});
控制器:UserCtrl
'use strict';
angular.module('knoweeApp')
.controller('UserCtrl', function (userFinder,user) {
this.teachers = user;
this.increment = function (item) {
item.rating += 1;
};
this.decrement = function (item) {
item.rating -= 1;
};
});
希望对您有所帮助,如有疑问请联系我
最近我开始使用ui-router
来管理我的页面状态。
我注意到,当我第一次 运行 服务器时,内容还在,但如果我浏览页面或重新加载页面,内容就会消失。
我知道 ui-router
上有一个错误可能会导致此问题。我更新了 ui-router
但错误仍然存在。
有没有人设法找到修复程序或解决它?
编辑----
我的调查让我相信它与 ui-router 无关,更多的是与应用程序完成承诺所需的时间有关。作为 jQuery
的一部分,我将在 setTimeout 上收到违规警告所以我在上次编辑中部分正确,因此得到了这个答案; jQuery 与我的问题有关(通过使用承诺来检索数据),但它也与 ui-router 的工作方式有关:
加载页面内容时,ui-router 将使用 GET 请求提供的数据管理第一次加载(和后续重新加载)。
因为这是一个承诺,所以不能保证(尤其是当您增加数据库时)数据会及时出现以呈现页面。
为避免发生这种情况,请将解析 属性 作为 ngRoute 的一部分。 属性 允许在呈现 DOM.
之前加载所有必要的数据如果您想了解更多信息,请关注下面的 link:
https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c
我的代码如下:
App.js
'use strict';
angular
.module('knoweeApp', ['ui.router'])
.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider) {
$stateProvider
.state('home', {
url:'/',
templateUrl: 'views/user.html',
controller: 'UserCtrl as user',
resolve: {
user: function(userFinder) {
return userFinder.getUsers();
}
}
})
.state('teacher', {
url:'/teacher/:name',
templateUrl: 'views/teacher.html',
controller: 'TeacherCtrl as teacher'
});
$urlRouterProvider.otherwise('/');
}]);
服务:userFinder
'use strict';
/**
* @ngdoc service
* @name knoweeApp.userFinder
* @description
* # userFinder
* Service in the knoweeApp.
*/
angular.module('knoweeApp')
.service('userFinder', function () {
// AngularJS will instantiate a singleton by calling "new" on this function
this.getUsers = function (){
return $.get('users.json');
};
});
控制器:UserCtrl
'use strict';
angular.module('knoweeApp')
.controller('UserCtrl', function (userFinder,user) {
this.teachers = user;
this.increment = function (item) {
item.rating += 1;
};
this.decrement = function (item) {
item.rating -= 1;
};
});
希望对您有所帮助,如有疑问请联系我