Dat*_*Chu 3 javascript jquery angularjs angularjs-directive
我有一个指令,它有一个递归包含模板的模板。在我的指令链接函数中,我无法使用选择器获取完整的 DOM。
这是我的指示。请注意,我的指令尝试在构造的所有 .ui.dropdown div 上调用 dropdown() 函数,以便激活嵌套下拉列表。
.directive("floatingDropdown", function() {
return {
restrict: 'E',
templateUrl: "scripts/Ui/FloatingDropdown.html",
replace: true,
scope: {
uiClass: '@',
model: '=ngModel',
optionTree: '='
},
link: function(scope, elem, attrs) {
scope.elemClass = scope.uiClass || "ui floating dropdown icon button";
$(elem).dropdown();
$(elem).find(".ui.dropdown").dropdown();
}
}
})
Run Code Online (Sandbox Code Playgroud)
scripts/Ui/FloatingDropdown.html 包含一个嵌套的包含。这会创建多个级别的下拉列表
<div class="{{elemClass}}">
<script type="text/ng-template" id="node_template.html">
<div class="ui dropdown" ng-if="option.options">
<span ><i class="dropdown icon"></i> {{option.value}}</span>
<div class="menu" ng-if="data.options">
<div class="item" ng-repeat="option in data.options" ng-include="'node_template.html'"></div>
</div>
</div>
<span ng-if="!option.options" ng-click="model=option">{{option}}</span>
</script>
<i class="dropdown icon"></i>
<div class="menu">
<div class="item" ng-repeat="option in optionTree.options" ng-include="'node_template.html'">
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我的问题是 $(elem).find(".ui.dropdown") 不会通过 ng-include 找到递归生成的 div
通过尝试在指令的 link() 方法中进行 DOM 操作,您正在尝试查询/修改尚未呈现的 DOM 部分。
您需要将这些 jquery 调用推迟到以后。您可以使用以下方法执行此操作:
$scope.$evalAsync(function() {
// DOM code
});
Run Code Online (Sandbox Code Playgroud)
或者
$timeout(function() {
// DOM code
}, 0);
Run Code Online (Sandbox Code Playgroud)
使用$evalAsync将在下一个$digest循环中运行表达式,将允许您在浏览器中呈现之前修改 HTML。使用$timeout将等到所有 $digest循环完成。
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |