ディレクティブを作成してdivに関連付けます。 例: div内に作成されたp要素を追跡し、ビューに関連付けられたコントローラから渡されるパラメータを双方向データバインディングでバインドするように定義します。
$要素のディレクティブのリンク関数内に挿入します。 次にdivの編集を検出するために、contenteditable入力イベントでdivにバインドします。 このコードの中で、divのp個の子要素の合計数を取得し、それをディレクティブから許可された変数に関連付けます。 このように、パラメータはdiv内のpの数と常に同期し、外部から渡すので、外部スコープからアクセスすることができます。
あなたのビューの内側では、ディレクティブで渡されたこのパラメータをng-repeatで繰り返し、ng-repeatの中に動的コンテンツを作成します。
HTMLコード:
ここ
<div ng-app="myApp">
<div ng-controller="Controller">
<div contenteditable="true" p-inspector p-elements="pElementsNumber">
TEST
</div>
{{pElementsNumber}}
<div ng-repeat="p in returnArrayFromNumber() track by $index">
P detected
</div>
</div>
</div>
JSコード:ここで
angular.module('myApp', [])
.controller('Controller', ['$scope', function($scope) {
$scope.pElementsNumber = 0;
$scope.returnArrayFromNumber = function() {
return new Array($scope.pElementsNumber);
};
}])
.directive('pInspector', function($rootScope) {
return {
restrict: 'A',
scope: {
pElements: '='
},
link: function ($scope, $element, $attrs) {
$element.on("input", function(e) {
var htmlString = $element.text();
var regex = /<p>[^<p><\/p>]*<\/p>/gi, result, count = 0;
var count = 0;
while ((result = regex.exec(htmlString))) {
count++;
}
$scope.pElements = count;
$rootScope.$apply();
});
}
};
});
実行している例:https://jsfiddle.net/a0jwmpy4/81/
ちょうど1つの勧告:あなたはより多くの要素を検出したい場合は、これを作りますパラメータ内の要素の名前を動的に受け取り、それらのすべてを検出するディレクティブです。あなたはdivの内側に検出するすべての要素のための単一のディレクティブを作成しないでください:)
希望これは
を渡す機能
editParagraph
を持っているのだろうか? – alphapilgrim