Я использую директиву для отображения div на экране только тогда, когда размер экрана меньше 600 пикселей. Проблема заключается в том, что значение области не обновляется, даже используя $apply()
внутри директивы.Директива AngularJS не обновляет значение области даже при применении
Это код:
function showBlock($window,$timeout) {
return {
restrict: 'A',
scope: true,
link: function(scope, element, attrs) {
scope.isBlock = false;
checkScreen();
function checkScreen() {
var wid = $window.innerWidth;
if (wid <= 600) {
if(!scope.isBlock) {
$timeout(function() {
scope.isBlock = true;
scope.$apply();
}, 100);
};
} else if (wid > 600) {
if(scope.isBlock) {
$timeout(function() {
scope.isBlock = false;
scope.$apply();
}, 100);
};
};
};
angular.element($window).bind('resize', function(){
checkScreen();
});
}
};
}
HTML:
<div ng-if="isBlock" show-block>
//..conent to show
</div>
<div ng-if="!isBlock" show-block>
//..other conent to show
</div>
Примечание: Если я не использую $ таймаут я получаю ошибку
$digest already in progress
Я консольные журналы внутри, чтобы проверить, обновляет ли оно значение, а внутри директивы все работает нормально. Но изменения не идут на представление. Блок не отображается.
если вы хотите просмотреть данные отличаются в зависимости от размера окна, вы должны использовать CSS, как '@media экрана и (макс-ширина: 600px)' – Lusk116
Я знаю об этом, но это будет используется для других purpouses, поэтому даже с базовым примером я буду расширять его позже. Кроме того, ng-if не отображает html, который в этом случае довольно обширен. – celsomtrindade