【问题标题】:How to bind dynamically generated elements in Angular.js?如何在 Angular.js 中绑定动态生成的元素?
【发布时间】:2014-07-16 16:06:54
【问题描述】:

我开始使用 Angular.js 指令,因此我正在使用自定义指令动态生成 DOM。

我的指令的简化版本是:

angular.module('app', [])
  .controller('Controller', ['$scope',
    function($scope) {
      $scope.name = "André Pena";
      $scope.email = "andrerpena@gmail.com"
    }
  ])
  .directive('gText', function() {
    return {
      restrict: 'E',
      link: function(scope, element, attrs) {
        //input
        var input = angular.element("<input/>");
        input.attr("type", "text");
        input.addClass("form-control");
        input.attr("placeholder", attrs.placeholder);
        input.attr("name", attrs.property);
        element.append(input);
      }
    };
  });

这个指令的一个简单用法是:

<g-text label="E-mail" property="email" placeholder="Enter some e-mail"></g-text>

如您所见,我正在使用 Angular.js element 动态创建 input 标记。我想将此元素的valueproperty 属性中指定的属性绑定。在这种情况下,我希望输入的值是 email 范围属性 (andrerpena@gmail.com)。

如何实现?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

创建动态元素时,必须将其编译到指令中。为此,您必须使用角度的$compile 函数。 我已经为你做了。

看看这里:http://jsfiddle.net/3hJmz/1/

var app = angular.module('app', []);
app.controller('Controller', ['$scope',

function ($scope) {
    $scope.name = "André Pena";
    $scope.email = "andrerpena@gmail.com";
    console.log($scope.email);
}]);
app.directive('gText', function ($compile) {
    return {
        restrict: 'E',
        scope: {
            info: "=property"
        },

        link: function (scope, element, attrs) {

            var input = angular.element("<input/>");
            input.attr("type", "text");
            input.attr("placeholder", attrs.placeholder);
            input.attr("value", scope.info);

            var linkFn = $compile(input);
            var content = linkFn(scope);
            element.append(content);
        }
    };
});

还有什么问题,请回复。

【讨论】:

  • 感谢您的回答,但出于某种原因,即使显示了电子邮件地址的属性,当我更改文本框中的电子邮件时,它也不是双向绑定。你知道我该如何解决吗?
  • 双向绑定是什么意思?请详细说明这个特定示例。
  • 如果您对给出的答案感到满意,请将其标记为已选择/已回答。以便其他人可以参考。
  • 问题是当您通过输入更改email 时,并没有更新模型中的email 属性。查看示例:jsfiddle.net/f8kRD。当你编辑文本框时,它外面的电子邮件也应该更新。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2012-06-19
  • 2012-10-08
  • 1970-01-01
  • 2017-09-06
  • 2020-12-28
相关资源
最近更新 更多