gpt4 book ai didi

jquery - Angularjs - 使用指令或小部件动态更改 dom?

转载 作者:行者123 更新时间:2023-12-03 22:25:11 26 4
gpt4 key购买 nike

我的目标是了解如何正确使用 angularJS。我希望能够使用 angularJS 将变量的选择与动态更改 DOM 结构联系起来。我认为我不太理解 Angular 提供的文档,并且我没有在这里或其他地方找到任何示例。如有任何帮助,我们将不胜感激。

我的想法是,我有一个用例,首先选择类型,然后从选择的类型中创建适当的输入类型元素,然后使用 ng-model 进行记录(从文本区域到复选框)例如),始终由 angularjs Controller 控制以进行验证/限制。我习惯了在页面上拥有可克隆元素并使用 jQuery 销毁和创建新元素的想法,但我一直在读到 Controller 不应该具有这种逻辑,而应该使用指令/小部件来创建。然而,我没有看到任何以这种方式操纵指令或小部件的示例,所以我什至不确定如何继续。我可以使用指令以这种方式操作 DOM,不仅仅是一次,而是基于监视的元素多次?

我想做的事情的示例。

$scope.types = ['Type1','Type2']

// something along the lines of...
$scope.layouts = {'Type1':['textarea','textarea'], 'Type2':['numeric','datepicker']}

选择类型 1:

  • 显示 2 个文本区域

选择类型 2:

  • 显示数字输入
  • 显示日期选择器

最佳答案

我就是这么做的。请注意,这只是一个起点。仍然存在绑定(bind)到相应输入中的特定值的问题。我希望它有帮助。

标记:

<html ng-app="App" ng-controller="MainCtrl">

<body>

<component index="0"></component>
<component index="1"></component>
Current type: {{type}}
<button ng-click="toggleType()">Toggle</button>

</body>

</html>

指令:

var ngApp = angular.module('App', []).directive('component', function() {
var link = function(scope, element, attrs) {
var render = function() {
var t = scope.layouts[scope.type][attrs.index];
if (t === 'textarea') {
element.html('<' + t + ' /><br>');
}
else {
element.html('<input type="' + t + '"><br>');
}
};
//key point here to watch for changes of the type property
scope.$watch('type', function(newValue, oldValue) {
render();
});

render();
};
return {
restrict : 'E',
link : link
}
});

Controller :

var MainCtrl = function MainCtrl($scope) {
$scope.type = 'Type1';
$scope.types = [ 'Type1', 'Type2' ];
$scope.layouts = {
'Type1' : [ 'textarea', 'textarea' ],
'Type2' : [ 'number', 'text' ]
};

$scope.toggleType = function() {
if ($scope.type === 'Type1') {
$scope.type = 'Type2';
}
else {
$scope.type = 'Type1';
}
};
};

关于jquery - Angularjs - 使用指令或小部件动态更改 dom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11853484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com