如何访问Angular JS模板指令中设置的值,如“ng class?”
How to access the values set in an Angular JS template directive such as “ng-class?”
前言:我正在寻找一个100%干净/原生的Angular JS解决方案来解决这个问题,它使用Angular JS框架本身的功能,而不是一个在DOM中搜索ng-class
值的拼凑/破解
所以我有一个模板,设置如下:
<div class="stuff" ng-class="{ 0: 'default', 1: 'thing_1', 2: 'thing_2', 3: 'thing_3', 4: 'thing_4', 5: 'thing_5' }[thingType]">
我知道,在处理DIV的控制器中,我可以分配这样的值;这将导致CCD_ 2被添加到我的DIV类stuff
:
$scope.thingType = 2;
这太棒了!但是,在我的控制器中,有没有任何方法可以直接获得ng-class
模板中设置的值?我假设JSON被传递到Angular的内部,但如果在控制器中,我可以计算我在模板中设置的值,那就太好了。
我所要做的就是将ng-class
JSON blob放入控制器中。目标是,如果我在模板中设置多个类选项,比如那些键编号从0
到5
的类选项,并且不知何故,我决定在CSS JSON中添加第六个选项,那么如果控制器本身可以自己计算键的数量,而不必调整模板中的一个值和控制器中的其他值,那就太好了。
不管人们怎么看待这种方法,有什么简单/干净的方法可以做到这一点吗?有没有一种方法可以做到这一点,即使用Angular逻辑本身,而不必创建一个用指令等在Angular之外搜索DOM的拼凑?我正在寻找最干净和Angular原生的解决方案,如果存在这样的解决方案的话。
<div ng-class="myJson">
$scope.myJson = { 0: 'default', 1: 'thing_1', 2: 'thing_2', 3: 'thing_3', 4: 'thing_4', 5: 'thing_5' }[thingType];
现在你在你的模板和控制器中都有它,所以你可以用它做任何你想做的事情
另一种解决方案可能是创建一个指令来获取ng-class
,将其存储在一个服务中,然后控制器可以获取该服务并将其解析为JSON:
<div id="myDiv1" ng-class="{ 0: 'default', 1: 'thing_1', 2: 'thing_2', 3: 'thing_3', 4: 'thing_4', 5: 'thing_5' }[thingType]"></div>
angular.module('myApp', [])
.service('myService', [function() {
var data = {};
this.set = function(k, v) {
data[k] = v;
};
this.get = function(k) {
return k ? data[k] : data;
};
}])
.directive('myDirective', ['myService', function(myService) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var ngClasses = element.getAttribute('ng-class');
myService.set(element.getAttribute('id'), ngClasses);
}
}
}])
.controller('MyCtrl', ['myService', function(myService) {
var id = 'Use a common id for your DIV which is also available here';
// Now you will have the ngClasses as JSON as well as keep the template markup
var ngClasses = JSON.parse(myService.get(id));
}]);
我不明白这是怎么回事,因为ng class指令不是这样工作的:
<div class="stuff" ng-class="{ 0: 'default', 1: 'thing_1', 2: 'thing_2', 3: 'thing_3', 4: 'thing_4', 5: 'thing_5' }[thingType]">
我的意思是,ng类得到一个对象,您首先声明类名然后添加表达式(这通常是一个条件),如下所示(有两个类):
//this is going to add 'default' class if isActive is true and 'thing_1' accordingly
<div ng-class="{default: isActive, thing_1: isActiveThing1}"></div>
- 如何设置html元素填充的动画
- 需要帮助设置json数组
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 为什么设置 element.className = null 会导致 class=“null”
- 如何访问Angular JS模板指令中设置的值,如“ng class?”
- 获取<img>src,并通过class设置为变量(id不可用)
- 将class属性设置为元素不适用于javascript和jquery
- 我可以在Ajax中为返回数据设置class或Id属性吗
- 用ionic框架和angular js在html中动态设置class属性
- 如何设置class=“;活动的”;当使用迭代生成N个选项卡(引导程序)时
- 你可以设置ECMAScript对象的内部[[Class]]属性吗?
- class applet -设置值(IP地址)到表单字段
- 使用ng-class和ng-change在元素中动态设置类
- 在AngularJS中将class设置为一个变量
- 如何设置class="活动"到两个独立的基于滚动的链接
- 通过调用它的ID或Class来设置HTML
- 为什么同时设置className和class ?
- 当style在id/class css中定义时,获取/设置元素的style
- Jquery将class设置为所有元素,除了具有特定class + children/children的children
- asp classic-设置所选菜单项class=“”是否更专业;选择“;服务器端或使用JavaScript