如何在不使用指令的情况下操作ng-if内部的元素
How to manipulate elements inside ng-if without using a directive
我在为ng-if中的元素执行DOM操作语句时遇到问题。
我认为这里的问题是DOM在操作代码运行时还没有准备好。
有没有办法在没有指令的情况下做到这一点?
示例(如果通过复选框处理,两个在ng内选择一个):
<!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>
控制器:
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展示作品是因为它的本质(隐藏的元素是可以操纵的),但它不符合我的需求。
我正在寻找一个一般的答案,add和option只是一个例子。这个句子可以是任何操纵嵌套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>
使用ng-repeat
:
控制器:
$scope.select = [
{value: 4, label: 'option 4'},
{value: 5, label: 'option 5'},
{value: 6, label: 'option 6'},
];
视图:
<div ng-if="checked">
<select ng-model="select">
<option value="option.value" ng-repeat="option in select">{{ option.label }}</option>
</select>
</div>
那么您的选择就是动态的。稍后,当您想要添加更多选项时,只需使用$scope.select.push({value: 7, label: 'option 7'});
等
你试过改变这个吗:
$scope.$watch('checked', function (newVal, oldVal) {
if (newVal && $scope.checked) {
$(document).ready(function () {
//Not works
$("#myselect2").append("<option value='7'>new option</option>");
});
}
});
进入:
$scope.$watch('checked', function (newVal, oldVal) {
if (newVal && $scope.checked) {
$timeout(function(){
$("#myselect2").append("<option value='7'>new option</option>");
});
}
});
有关$timeout
的更多信息,请访问:https://docs.angularjs.org/api/ng/service/$timeout
我假设"没有指令"是指没有自定义指令。
您可以使用ngOptions指令将选择选项绑定到作用域上的数组:
HTML:
<select id="myselect2" ng-model="selectedOption" ng-options="option for option in options"></select>
控制器:
app.controller("Select2Controller", function($scope) {
$scope.checked = false;
$scope.options = ['option1', 'option2'];
$scope.$watch('checked', function (newVal, oldVal) {
if (newVal) {
$scope.options.push('option3');
} else {
$scope.options.pop();
}
});
});
相关文章:
- 如何在不使用插件的情况下用程序记录浏览器操作
- 在不更改 HTML 的情况下操作 HTML 字符串的内容
- 试图在没有get/putImageData的情况下操作画布上的alpha
- 如何在不使用主题或命令式操作的情况下管理状态 在一个简单的 RxJS 示例中
- 为什么您可以在不引用“this”的情况下操作对象属性
- 如何在没有服务器端的情况下监视用户操作
- 有没有办法在没有 eval() 的情况下操作包含的 JS
- 是否可以在没有JS的情况下将数据放入操作中
- 操作方法确保在不使用 WebFont 加载器的情况下加载@font面
- 我可以在没有 Redux Thunk 中间件的情况下调度多个操作吗?
- 如果我想在没有jQuery的情况下操作HTML / CSS,我应该应用什么方法
- 在没有 JavaScript 的情况下更改表单操作目标
- 如何在没有大量代码的情况下操作单个输入字段值
- 如何限制用户在没有特定操作的情况下离开页面(例如,单击提交按钮)
- 如何在没有“删除”操作的情况下删除对象的属性
- 如何在不使用指令的情况下操作ng-if内部的元素
- 如何在不影响AngularJS中原始变量的情况下操作视图值
- 如何在不影响其他项目的情况下操作一组列表组项目
- jQuery/php/mysql-如何在不重新加载页面的情况下操作mysqli_query
- JQuery-在没有事件的情况下操作新元素