Angularjs指令解析变量的内容
Angularjs directive parse contents for variables
我正在尝试构建一个可以用来控制网格布局的角指令。
指令是标签,但我想要能够做的是解析这个标签内的DOM元素,并创建一个嵌套的行和列宽度数组。列可以包含更多的行和列,所以我希望能够解析这些。
在这个例子中,我想选择的类是:
.row.six.five
我不完全确定如何将HTML/DOM传递到指令中进行操作。我试过使用$compile和一个pre函数,但没有取得太大进展。
<grid>
<div class="ui row">
<div class="ui six wide column" >lorem</div>
<div class="ui five wide column" >ipsum</div>
</div>
<div class="ui row" >
<div class="ui five wide column" >lorem</div>
<div class="ui seven wide column" >ipsum</div>
</div>
</grid>
嵌套指令就够了。
<grid>
<div grid-row class="ui row">
<div grid-col class="ui six wide column" >lorem</div>
<div grid-col class="ui five wide column" >ipsum</div>
</div>
<div grid-row class="ui row" >
<div grid-col class="ui five wide column" >lorem</div>
<div grid-col class="ui seven wide column" >ipsum</div>
</div>
</grid>
在这里,我们介绍了两个新的指令,grid-row
和grid-col
。您需要将controller
属性附加到grid
指令定义上。这是你的子指令进行通信的共同点。然后,您将像这样定义您的子节点:
.directive('gridRow', function() {
return {
restrict: 'AEC',
require: '^grid',
link: function(s, e, a, ctrl) {
// ctrl is the controller you defined at the grid level.
}
}
});
注意我们是如何通过require
指定的,在树的某个地方将有一个父元素grid
。这将在link
函数中为您提供一个额外的参数,该参数将使您能够获得父控制器。
为gridCol
再做一个。
这样做的好处是,你利用了angular的解析器,你以一种非常动态的方式自动连接了子节点。您还可以继续将这些项嵌套得越来越深。此外,如果开始出现不属于grid-col/grid-row
系统的元素,您可以优雅地处理它们。
建议:如果你开始把这些东西嵌套得足够低,你可能会想知道子节点是如何知道在层次结构的哪个位置附着自己的。由于每个子节点都可以为自己的子节点创建一个作用域,一种方法是通过link函数的$scope
:
link: function(scope, e, a, ctrl) {
var thisParent = scope.parentNode;
if (!thisParent) {
scope.parentNode = ctrl.addChild(scope);
} else {
scope.parentNode = thisParent.addChild(scope);
}
}
由于java中原型继承的工作方式,每个子节点将模糊前面的parentNode
定义。我将parentNode
分配给thisParent
作为一个小语义技巧。这让我们在用我们自己的阴影后得到原始值。
总而言之,没有太多的代码来做你想做的事情,但是在这个解决方案中有一个丰富的angular思想子集。
- 参数变量出现ngTable指令问题
- 以角度将父指令变量传递给子指令
- 将方法从控制器注入到未使用右变量调用的指令
- 自定义指令模板中的AngularJS控制变量
- 如何在隔离作用域指令中访问此作用域变量
- 在 Angular 指令中,如何进行回调,其中函数名称位于父范围的变量中
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 我无法通过angularjs中的指令更新变量
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 使用存储在thymleaf变量中的角度指令
- 在 ng-click 中设置$scope变量指令
- 将对象传递给指令不允许全局变量
- 保存全局变量以供指令监视的最佳方法
- AngularJS:从指令设置范围变量
- 将对象(变量)传递给angularjs指令
- 从AngularJS中的指令模板访问内联控制器变量
- 在自定义指令中角度设置新变量
- 使用 AngularJS 从指令设置范围变量
- 两个指令引用一个变量,但第二个指令不引用;不要急于改变
- 当指令被销毁时,我需要销毁本地控制器变量吗