In this demonstration, I will outline how to achieve a specific outcome for informational purposes. Please note that the method described here is not recommended for solving your broader issue. Although this example extracts HTML from the document, it does not integrate with Angular. For proper integration, you would need to utilize an alternative directive, such as this one (click). This approach is fundamentally flawed.
angular.module('myApp', [])
.controller('TodoCtrl', function($scope) {
$scope.fields = [{
input: '<input type="text" ng-model="model.FirstName">'
}, {
input: '<input type="text" ng-model="model.LastName">'
}, ];
})
// filter to make Angular trust the html
.filter('safeHtml', ['$sce', function ($sce) {
return function (text) {
return $sce.trustAsHtml(text);
};
}])
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form ng-app="myApp" ng-controller="TodoCtrl">
<!-- use ng-bind-html on trusted html to bind it (see the js) -->
<div ng-repeat="field in fields" ng-bind-html="field.input | safeHtml"></div>
</form>
Alternatively, you can simplify the process by leveraging the object properties directly for the ng-repeat
functionality. This results in a more straightforward and efficient solution!
angular.module('myApp', [])
.controller('TodoCtrl', function($scope) {
$scope.model = {
'FirstName': 'Test',
'LastName': 'Test Last'
};
})
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form ng-app="myApp" ng-controller="TodoCtrl">
<div ng-repeat="(key,value) in model">
<input type="text" ng-model="model[key]"/>
</div>
</form>
It is essential to refrain from mixing controller logic with DOM manipulation. Placing HTML snippets in a controller usually indicates a misguided approach. Directives should handle all DOM manipulations conclusively.