創建一個指令並將其關聯到您的div。 例如: 定義爲使用雙向數據綁定綁定參數,這些數據綁定將跟蹤在div內創建的p元素並將從與視圖關聯的控制器傳遞。
注入到您的$ element指令的鏈接函數中。 然後通過contenteditable輸入事件綁定到div,以檢測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/
只是一個建議:如果你想探測更多的元素,使這個指令動態接受參數中元素的名稱並檢測所有元素的名稱。請不要創造你想要的DIV :)
希望這有助於內部檢測每一個元素的單指令
你嘗試過這麼遠嗎? – alphapilgrim