发生状态变化时不应用ng类
ng-class not applied when state change occurs
我有一个指令应用一些类的元素基于窗口的大小:
angular.module( 'myApp' ).directive('resizer', ['$window', function ($window) {
return {
link: function (scope, elem, attrs) {
angular.element($window).on('load resize', function () {
scope.$apply(function(){
scope.isSmall = $window.innerWidth < 800 ? true : false;
});
});
angular.element($window).on('$stateChangeStart', function () {
scope.$apply(function(){
scope.isSmall = $window.innerWidth < 800 ? true : false;
});
});
}
};
}]);
基本上它根据窗口宽度将:isSmall设置为true或false。然后我的ng-click使用这个值来应用我的类,如下所示:
<div resizer ng-class="{ 'class1 class2 class': isSmall }"></div>
它工作得很好,但我注意到,如果在我的应用程序中改变状态以导航回应用此指令的页面,则样式不会应用于元素。有人知道怎么解吗?我的印象是我添加了错误的事件处理程序;我尝试添加$stateChangeStart到。on调用,但到目前为止还不能让它工作
你可以使用css媒体查询来完成你需要的。
你面临的问题是在路由改变期间没有resize或load事件,所以在指令触发时初始化scope.isSmall
,而不仅仅是在事件处理程序中
angular.module('myApp').directive('resizer', ['$window', function ($window) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
function setIsSmall() {
scope.isSmall = $window.innerWidth < 800 ? true : false;
}
// when directive fires
setIsSmall();
angular.element($window).on('load resize', function () {
scope.$apply(setIsSmall);
});
}
};
}]);
注意:也可以考虑在作用域销毁期间删除此处理程序,以避免重复添加它。这可能会对应用程序的其他部分产生影响,但是如果设置了任何其他侦听器
scope.$on('$destroy', function(){
$window.off('load resize');
});
尝试将指令作用域设置为true
return {
restrict: 'A',
scope: false,
link: function (scope, elem, attrs) {
angular.element($window).on('load resize', function () {
scope.$apply(function(){
scope.isSmall = $window.innerWidth < 800 ? true : false;
});
});
}
};
因此,父元素的作用域将被更改,而相关元素将收到更改。
祝你好运!希望这对你有帮助:)
参考:http://www.undefinednull.com/2014/02/11/mastering-the-scope-of-a-directive-in-angularjs/
相关文章:
- ng应用程序使脚本无限运行
- 如何正确应用Angularjs ng repeat
- Angular ng控制器与ng应用程序冲突
- 如何应用带过滤器的ng if来过滤记录,并在同一页面中显示两个不同的视图
- 在AngularJS中的另一个ng应用程序中使用来自一个ng程序的Cookie值
- 如何仅在字段为$dirty时应用ng模式
- 如何应用 ng-注释,然后在 gulp-if 中丑化
- 动态添加数据时如何应用 ng 类 (?)
- 未应用NG重复过滤器
- 如何在页面加载前应用 ng-单击
- 应用 ng 重复后从输入中删除的样式
- 应用ng类来计算P标记内的不同表达式
- 仅在鼠标悬停时应用ng鼠标悬停
- 当应用ng模型过滤器时,ng在加载时重复清空
- 应用ng-pressstart和ng-pressend指令后,Angularjs ng-click不起作用
- 有条件地应用ng类
- 对无效的返回值应用ng类
- 发生状态变化时不应用ng类
- 如何在同一个输入字段中应用ng-focus和ng-change
- 使用 true / false 应用 ng 类