使用ng-bind-html在控制器内部无法点击

时间:2015-08-05 06:55:37

标签: javascript angularjs html5 angularjs-controller ng-bind-html

在我的代码下面 - 点击不工作,而我正在检查检查元素ng-click不显示,帮我怎么做



var app = angular.module('myApp', ['ngSanitize']);
app.controller('myCtrl', function($scope) {
    $scope.firstName = "<b ng-click=test(1)>John</b><br><b ng-click=test1(1)>Testing</b>";
  

$scope.test=function(val)
{
alert(val)
}

$scope.test1=function(val)
{
alert(val)
}

});
&#13;
<!DOCTYPE html>
<html>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular-sanitize.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
 <span ng-bind-html=firstName><span>
</div>
</body>
</html>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:4)

此代码将解决您的问题。在控制器中添加此指令。

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
                });
            }
        }
    })

你的HTML将是这样的:

<div id ="section1" ng-bind-html="divHtmlVariable" compile-template></div>

答案 1 :(得分:2)

ng-click无法正常工作的原因是,ng-bind-html不能编译div,您应该使用ng-if 编译div并添加来自指令而不是控制器的那个元素。

<强>标记

<div ng-app="myApp" ng-controller="myCtrl">
  <span ng-if=showFirstName>
    <b ng-click=test(1)>John</b><br><b ng-click=test1(1)>Testing</b>
  <span>
</div>

<强>代码

$scope.showFirstName = true;//for showing div

答案 2 :(得分:1)

问题是Angular不会解析serverpath内的指令。

正确的解决方法是自己创建一个指令来编译你包含的html

ng-bind-html

然后,您可以将.directive('compile', ['$compile', function ($compile) { return function(scope, element, attrs) { scope.$watch( function(scope) { return scope.$eval(attrs.compile); }, function(value) { element.html(value); $compile(element.contents())(scope); } ); }; }]) 引用为firstName

答案 3 :(得分:0)

试试这个......这个链接解决了我的问题  代码:Link代码
添加指令

 myApp.directive('compile', ['$compile', function ($compile)