javascript - 如何在不使用指令的情况下操作 ng-if 内的元素

标签 javascript jquery angularjs

我在尝试对 ng-if 内的元素执行 DOM 操作语句时遇到问题。

我认为这里的问题是当操作代码运行时 DOM 还没有准备好。

有没有一种方法可以在没有指令的情况下做到这一点?

示例(通过复选框在 ng-if 句柄内二选一):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Select2 Test</title>
    <link rel="stylesheet" type="text/css" href="./bower_components/bootstrap/dist/css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="./bower_components/select2/dist/css/select2.css">
</head>
<body ng-app="Myapp">
    <div class="container" ng-controller="Select2Controller">
        <div class="row">
            <div class="col-sm-12">
                <select id="myselect" style="width:200px;">
                    <option value="1">option1</option>
                    <option value="2">option2</option>
                    <option value="3">option3</option>
                </select>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-12">
                <input type="checkbox" name="toogle" ng-model="checked">Show ng-if nested select</input>
                <div ng-if="checked">
                    <select id="myselect2" style="width:200px;">
                    <option value="4">option4</option>
                    <option value="5">option5</option>
                    <option value="6">option6</option>
                </select>
                </div>
            </div>
        </div>
    </div>
    <script src="./bower_components/jquery/dist/jquery.js" ></script>
    <script src="./bower_components/bootstrap/dist/js/bootstrap.js" ></script>
    <script src="./bower_components/angular/angular.js" ></script>
    <script src="./select.ctrl.js" type="text/javascript"></script>
    <script src="./app.js" type="text/javascript"></script>
</body>
</html>

Controller :

var app = angular.module("Myapp", []);

app.controller("Select2Controller", function($scope) {

    $scope.checked = false;   

   $( document ).ready(function() {
        //This code works 
        $("#myselect").append("<option value='4'>new option</option>");
    });

    $scope.$watch('checked', function (newVal, oldVal) {
        if (newVal && $scope.checked) {
            $(document).ready(function () {
                //Not works
                $("#myselect2").append("<option value='7'>new option</option>");
            });  
        }
    });

});

第一个选择表现良好,但第二个选择保持相同,在这种情况下没有添加选项。

我尝试了其他句子并发生了相同的历史。 ng-show 因其本质而有效(隐藏的元素是可以操纵的),但它不符合我的需要。

我正在寻找一般答案,添加和选项只是一个例子。该句子可以是任何操作嵌套 ng-if 元素的内容。

有什么想法或解决方案吗?谢谢

最佳答案

为什么不使用 ng-if 作为该选项?喜欢:

<div ng-if="checked">
    <select id="myselect2" style="width:200px;">
        <option value="4">option4</option>
        <option value="5">option5</option>
        <option value="6">option6</option>
        <option ng-if="something" value="7">option7</option>
    </select>
</div>

关于javascript - 如何在不使用指令的情况下操作 ng-if 内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532291/

相关文章:

javascript - 可以在 Node.js 中将变量设置为只读吗

php - AJAX 上传不起作用,它会重新加载整个页面

javascript - 使用 jQuery 在框 1 中淡入淡出

php - 排序、搜索(过滤)、分页 HTML 表格

angularjs - 带有 Angular 输入掩码的输入掩码

angularjs - 我应该如何在 Angular Material 中实现多重选择选项?

使用 ng-repeat 数据的 AngularJS UI Bootstrap 弹出窗口

javascript - firebase -> 日期顺序反转

javascript - DC.JS 在点击时选择一个栏

jquery - 在 jQuery 中使用 window.location.hash