使用ng-bind-html和$ sce.trustAsHtml创建一个带有ng-model绑定的字符串

时间:2016-10-13 14:53:29

标签: angularjs ng-bind-html

我想创建动态表单。在我的控制器里面我创建了一个字符串

var str = "<input type='text' value='" + $scope.selectedData.code + "' class='form-control' />";
$scope.htmlString = $sce.trustAsHtml(str);

并在我的html页面中

<div ng-bind-html="htmlString"></div>

我得到了值,但没有约束力。 我也试着用

var str = "<input type='text' ng-model='" + $scope.selectedData.code + "' class='form-control' />";
$scope.htmlString = $sce.trustAsHtml(str);

也行不通。任何人都知道这有什么作用吗?

1 个答案:

答案 0 :(得分:3)

HTML:

添加指令:compile-template

<div ng-bind-html="htmlString" compile-template></div>

JS:

angular.module('ngApp', ['ngSanitize'])
.controller('controller1', ['$scope','$sce', function($scope, $sce) {
    var str = "<input type='text' ng-model='" + $scope.selectedData.code + "' class='form-control' />";
    $scope.htmlString = $sce.trustAsHtml(str);
}])
.directive('compileTemplate', function($compile, $parse){
    return {
        link: function(scope, element, attr){
            var parsed = $parse(attr.ngBindHtml);
            function getStringValue() {
                return (parsed(scope) || '').toString();
            }

            // Recompile if the template changes
            scope.$watch(getStringValue, function() {
                $compile(element, null, -9999)(scope);  // The -9999 makes it skip directives so that we do not recompile ourselves
            });
        }
    }
});