AngularJS-从控制器更改类的属性
AngularJS - Change properties of a class from a controller
我不会详细讨论这个用例(需要覆盖Angular Material中的一些行为,这会导致Safari中的错误),但我要做的是:
HTML:
<style>
.changeme{
height: 300px;
}
</style>
<div class='changeme'>
Some Text
</div>
我的JS代码查看浏览器窗口的高度,我需要从控制器动态更改.changeme
的height
属性。
我不能通过ng-style
执行此操作,因为Angular Material
会将ng样式从所讨论的特定元素中剥离。
是否可以从Angular操作<style>
标签?或者有实现这一目标的任何选择吗?
如前所述,对于DOM操作,最好使用指令。
jsfddle上的实例。
angular.module('ExampleApp', [])
.controller('ExampleController', function($scope) {
})
.directive('changeme', function() {
return {
restrict: "AC",
scope: {
elementHeight: "="
},
link: function(scope, elem) {
scope.$watch('elementHeight', function() {
elem.css('height', scope.elementHeight);
});
},
}
});
.changeme {
height: 300px;
border: 1px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="ExampleApp">
<div ng-controller="ExampleController">
Change height:
<input ng-model="height" /> don't forget px. Example 100px.
<div class='changeme' element-height="height">
Some Text
</div>
</div>
</div>
首先,您可以使用<style>
标记来覆盖Angular Material样式,但更推荐使用css文件。
其次,您可以使用jQuery为css值传递动态值。在jQuery中,您有函数css()
。您可以将参数名称及其值传递给它。
例如.changeme.css('height', '300px');
您可以在此处查看有关css()
的更多信息。
您必须在控制器中添加jQuery代码。您可以将变量传递给它,并根据需要对其进行操作。
第三,注意导入的css文件的顺序是很重要的。例如,如果Angular Material css文件导入位于css导入文件范围的最底部,那么最底部的文件将覆盖类或id的样式(如果它们存在于上述css文件中)。这里有一个例子:
<link rel="stylesheet" type="text/css" href="base.css">
<link rel="stylesheet" type="text/css" href="angularM.css">
假设base.css
对于名为myClass的类具有名为width的样式属性,并且假设angularM文件对于相同属性width=也具有相同类的样式。在这种情况下,angularM文件的样式将覆盖base.css
文件myClass样式。
我希望最后一点的解释不复杂。
- 未激发路由的控制器属性上的观察者
- 当使用控制器作为语法时,如何从父指令继承属性
- 将指令绑定到控制器属性
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- Ember访问公共路由/控制器mxiin中的控制器属性
- 从控制器访问mixin属性
- 如何从jQuery设置控制器或全局变量的属性
- 通过emberJS中的控制器修改组件的属性
- 设置AngularJS控制器属性不能是使用Coffeescript的最后一行
- 角度控制器不绑定服务对象属性 ng-repeat
- 在控制器中访问 ng-重复$first属性
- 无权访问我的控制器 Angular 中的属性.js 1.3
- Ember.js数组控制器计算属性的复选框
- 控制器的属性不会动态更改
- 角度指令和属性Don'在控制器内创建和设置时无法工作
- 每次属性更改时,角度控制器都会初始化
- 通过 AngularJS 中的 ngClick 将整个对象或仅属性从视图传递到控制器
- 无法使用typescript访问angular中另一个控制器中声明的$rootscope属性
- 角度:覆盖'@'链接或控制器中隔离作用域中的属性
- 扩展或定义新的dat.gui属性控制器的最佳方法