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

标签 jquery widget angularjs using-directives

我的目标是了解如何正确使用 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/

相关文章:

javascript - JQuery Onload 刷新 iframe

javascript - 使用 jQuery 查找和替换 HTML

javascript - 无法从克隆表单将数据输入到 mysql?

javascript - 如何将 "onload"添加到我的 Dojo 类中?

javascript - 检查 ng-repeat 中的项目是否已经包含值

angularjs - ngClass 指令 : Can I use multiple expressions to add multiple classes?

javascript - 增大和减小 div 内所有元素的字体大小

html - 从以下小部件中删除 "with Google Friend Connect"文本

android-studio - 从 UI 布局中提取 Flutter 小部件的快捷方式

angularjs - 如何使用 AngularJS 为 div 高度变化设置动画