2014-07-12 67 views
2

我開始使用Angular.js指令,所以我使用自定義指令動態生成DOM。如何在Angular.js中綁定動態生成的元素?

我的指令的簡化版本如下:

angular.module('app', []) 
    .controller('Controller', ['$scope', 
    function($scope) { 
     $scope.name = "André Pena"; 
     $scope.email = "[email protected]" 
    } 
    ]) 
    .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> 

正如你所看到的,我動態創建一個input標籤使用Angular.js element。我想將此元素的valueproperty屬性中指定的屬性綁定。在這種情況下,我希望輸入的值爲email範圍屬性([email protected])。

如何做到這一點?

+0

我想這可能是有益的[試試這個] [1] [1]:http://stackoverflow.com/questions/19867554/bind-angularjs-to-newly-created-html-element-dynamically –

回答

0

當您創建動態元素時,必須將其編譯到指令中。爲此,您必須使用角度的$compile函數。 我已經爲你做了。

看看這裏:http://jsfiddle.net/3hJmz/1/

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

function ($scope) { 
    $scope.name = "André Pena"; 
    $scope.email = "[email protected]"; 
    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); 
     } 
    }; 
}); 

更多的關注,回覆。

+0

我很感謝您的回答,但由於某些原因,即使顯示電子郵件地址get的屬性,但當我在文本框中更改電子郵件時,它不是雙向綁定。你知道我該如何解決這個問題? –

+0

雙向綁定在哪個意義上?請詳細說明這個特定的例子。 – micronyks

+0

如果您對給定答案感到滿意,請將其標記爲已選中/已答覆。所以其他人可以參考它。 – micronyks

相關問題