Я занят приложением Angularjs, и все в порядке, но у меня проблема с реализацией мобильной версии сайта. Я не могу просто реагировать на стили, мне нужно использовать разные файлы просмотра для мобильных/настольных версий. Так, в моем приложении я использую UI-маршрутизатор с следующей конфигурацией:Angularjs меняет вид на размер окна
dopGruz
.config([ '$stateProvider', '$urlRouterProvider','$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider){
$stateProvider
.state('root',{
views: {
"navbar" : {
controller: 'viewsController',
templateProvider: function($http, viewsWatcherFactory) {
return viewsWatcherFactory
.get('app/views/nav-bar.html')
.then(function(obj){
return $http
.get(obj.templateName)
.then(function(tpl){
return tpl.data;
});
});
} },
"" : { template: '<div ui-view></div>' }
}
})
Моей фабрика возвращающей мобильного шаблона на основе шириной окна
dopGruz.factory('viewsWatcherFactory', [
'$http',
'$timeout',
function($http, $timeout) {
var _ifMobile = (function(){
return window.innerWidth < 850;
})();
return {
get : function(id) {
return $timeout(function(){
var path = id;
if (_ifMobile) {
path = id.split('/');
path.splice(path.length-1,0,'mobile');
}
if (Array.isArray(path)) {
path = path.join('/');
}
return {templateName : path};
}, 0);
}
};
}
]);
Это хорошо работает при загрузке страницы - если ширина окна < 850px - он фактически загружает мобильную версию шаблона. Но есть ли способ вызвать templateProvider вручную на основе события? У меня есть контроллер, в котором я хотел бы реализовать:
dopGruz.controller('viewsController', function ($scope,$window) {
angular.element($window).bind('resize', function() {
console.log($window.innerWidth);
// do some magic and call templateProvider and update views files.
$scope.$digest();
});
});
Возможно, есть более простой и правильный способ сделать это. Любая помощь будет оценена