ng-repeat内でディレクティブをコンパイルするときにスコープに関する問題を解決するのに役立つ人はいますか?ng-repeat内でカスタムディレクティブをコンパイルできない
https://plnkr.co/edit/y6gfpe01x3ya8zZ5QQpt?p=preview
カスタムディレクティブinput-by-type
は、変数の型に基づいて、適切な<input>
で<div>
を置き換えることができます - ng-repeat
内で使用されるまで、これが正常に動作します。
plnkrの例で分かるように、指示はng-repeat
の中で使用されるまで、期待通りに機能します。
私は手動でinput-by-type
ディレクティブをコンパイルするinputs[0]
を参照する場合、それだけで正常に動作します:
<label>
{{ inputs[0].name }}
<div input-by-type="{{ inputs[0].type }}" name="myInputA" ng-model="data.A" ng-required="true"></div>
</label>
しかし、今は私がng-repeat
ブロックでこれをラップし、コンパイルは、いくつかの予期しない出力して失敗します。期待
<label ng-repeat="input in inputs">
{{ input.name }}
<div input-by-type="{{ input.type }}" name="myInput{{ $index }}" ng-model="data[input.id]" ng-required="true"></div>
</label>
出力:
実際の出力:を省略することにより
app.directive('inputByType', ['$compile', '$interpolate', function($compile, $interpolate){
return {
restrict: 'A', // [attribute]
require: '^ngModel',
scope: true,
// terminal: true,
compile: function(element, attrs, transclude){
var inputs = {
text: '<input type="text" name="'+attrs.name+'" ng-model="'+attrs.ngModel+'" ng-disabled="'+attrs.ngDisabled+'" ng-required="'+attrs.ngRequired+'" placeholder="...">',
email: '<input type="email" name="'+attrs.name+'" ng-model="'+attrs.ngModel+'" ng-disabled="'+attrs.ngDisabled+'" ng-required="'+attrs.ngRequired+'" placeholder="[email protected]">',
number: '<input type="number" name="'+attrs.name+'" ng-model="'+attrs.ngModel+'" ng-disabled="'+attrs.ngDisabled+'" ng-required="'+attrs.ngRequired+'" placeholder="###">',
// image upload (redacted)
// file upload (redacted)
// date picker (redacted)
// color picker (redacted)
// boolean (redacted)
};
//return function(scope){
//USE postLink element, attrs
return function postLinkFn(scope, element, attrs) {
var type = $interpolate(attrs.inputByType)(scope); // Convert input-by-type="{{ some.type }}" into a useable value
var html = inputs[type] || inputs.text;
var e = $compile(html)(scope);
element.replaceWith(e);
console.log(type, html, element, e);
};
},
};
}]);
:
は、私は、彼らが位相に応じて異なる可能性があることをポストリンク引数を知っていました。ありがとうございました。 – oodavid