Unter meinem Code funktioniert ng-click nicht, während ich überprüfe, ob das Inspect-Element ng-click nicht angezeigt wird. Hilf mir, wie es geht

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

});
<!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>
4
user4277191 5 Aug. 2015 im 09:55

4 Antworten

Beste Antwort

Der Grund dafür, dass ng-click nicht funktioniert, ist, dass ng-bind-html div nicht kompiliert. Sie sollten dort ng-if verwenden. ODER kompilieren Sie ein div und fügen Sie dieses Element hinzu Direktive statt Controller.

Markup

<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>

Code

$scope.showFirstName = true;//for showing div
2
Pankaj Parkar 5 Aug. 2015 im 06:58

Das Problem ist, dass Angular die Anweisungen in Ihrem ng-bind-html nicht analysiert.

Eine geeignete Lösung hierfür besteht darin, selbst eine Direktive zum Kompilieren des von Ihnen enthaltenen HTML-Codes zu erstellen

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

Dann können Sie firstName als <div compile="firstName"><div> referenzieren

1
Rebornix 5 Aug. 2015 im 07:01

Dieser Code wird Ihr Problem lösen. Fügen Sie diese Anweisung in Ihren Controller ein.

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

Und Ihr HTML wird so sein:

<div id ="section1" ng-bind-html="divHtmlVariable" compile-template></div>
4
Tabish 2 Sept. 2015 im 12:48

Versuchen Sie dies ... dieser Link löst mein Problem Code: Link Code
Direktive hinzufügen

 myApp.directive('compile', ['$compile', function ($compile) 
0
user3843934user3843934 5 Aug. 2015 im 07:06