1

我正面临 $compile 的一个问题。我编写的代码非常大,因此我创建了一个小示例来复制此问题。假设我的页面中有一个按钮。当用户单击该按钮时,将创建另一个按钮,该按钮将具有 ng-click 方法,如下所示:

$scope.showAlert = function(){
       alert('pass'); 
    }
    $scope.createExample = function() {
          var button = '<button type="button" ng-click="' + $scope.showAlert + '()">click</button>';
          angular.element(document.body).append($compile(button)($scope));
    }

HTML:<button type="button" ng-click="createExample()">test</button>

当用户单击按钮时,将调用 createExample() 方法。此方法将创建另一个具有 ng-click 的按钮。这个 ng-clicks 包含一个发出警报的方法。

我在下面收到错误:

Error: Syntax Error: Token '{' is an unexpected token at column 12 of the expression [function (){
       alert('pass'); 
    }()] starting at [{
       alert('pass'); 
    }()].
    at Error (native)
    at throwError (https://code.angularjs.org/angular-1.0.1.js:5830:11)
    at parser (https://code.angularjs.org/angular-1.0.1.js:5824:5)
    at https://code.angularjs.org/angular-1.0.1.js:6387:29
    at https://code.angularjs.org/angular-1.0.1.js:12493:18
    at nodeLinkFn (https://code.angularjs.org/angular-1.0.1.js:4223:13)
    at compositeLinkFn (https://code.angularjs.org/angular-1.0.1.js:3838:14)
    at https://code.angularjs.org/angular-1.0.1.js:3750:30
    at Object.$scope.createExample (http://fiddle.jshell.net/JKBbV/751/show/:44:65)
    at https://code.angularjs.org/angular-1.0.1.js:6129:19 <button type="button" ng-click="function (){
       alert('pass'); 
    }()" class="ng-scope">

$compile 是我唯一的选择。如何使这项工作?

JSFiddle在这里

4

1 回答 1

1

ng-click获取要执行的处理程序名称,在这里您正在评估方法内容。

正确的代码只是:

    $scope.showAlert = function(){
       alert('pass'); 
    }
    $scope.createExample = function() {
          var button = '<button type="button" ng-click="showAlert()">click</button>';
          angular.element(document.body).append($compile(button)($scope));
    }
于 2015-11-24T12:31:36.993 回答