2016-12-29 8 views
2

2つの単語の間のスペースで文字列を使用するまで、私のコードは正常に機能していました。 私はAngularJsを使用しています。

stringAmi = '<i class="fa fa-user-plus fa-2x" ng-click="demandeAmiNotif(' + $scope.invite + ');"></i>'; 

の$ scope.inviteは、私のようなユーザーの名前を保つ文字列です: が、私はこのエラーを持っている「ヴィクトル・ユーゴーの」:

Error: [$parse:syntax] Syntax Error: Token 'Hugo' is unexpected, expecting [)] at column 22 of the expression [demandeAmi(Victor Hugo);] starting at [Hugo);]. 
+0

あなたはまだ有効なJSを生成する必要があります。 –

+0

その結果、実行されるコードの行は 'demandeAmiNotif(Victor Hugo);'はい、構文エラーです。 – David

+0

しかしそれはdemandeAmiNotif(Victor)と一緒に働いています。私は$ scope.invite = "Victor"と言っています。 – DionysoSong

答えて

2

は、私はあなたに多くの入れ子の文字列を持っていると思いますテンプレートと物事は複雑になっています。しかし、この場合、関数呼び出し引数は、文字列の中にあり、引数として渡されずに文字列として渡されるため、エスケープされません。

var stringAmi = 
    '<i class="fa fa-user-plus fa-2x" ng-click="demandeAmiNotif(' 
    + '\'' + $scope.invite + '\'' 
    + ');"></i>'; 

しかし、真剣に、しかし、それはそれがある限りひどいに見える、私はあなたのような方法でこれをしなければならない理由を知っているが、別のアプローチを使用して検討し、維持するために固体の方法で容易にしないでください。

angular.module('myApp', []) 
 
    .controller('myController', function($scope) { 
 
     $scope.invite = 'Vitor Hugo'; 
 
     $scope.demandeAmiNotif = function(name) { 
 
      console.log(name); 
 
     }; 
 
     $scope.stringAmi = 
 
      '<button ng-click="demandeAmiNotif(' + '\'' + $scope.invite + '\'' + ');">Click this!</button>'; 
 
    }) 
 
    .directive('bindHtmlCompile', function($compile) { 
 
     return { 
 
      restrict: 'A', 
 
      link: function(scope, element, attrs) { 
 
       scope.$watch(function() { 
 
        return scope.$eval(attrs.bindHtmlCompile); 
 
       }, function(value) { 
 
\t \t \t \t 
 
        element.html(value && value.toString()); 
 
\t \t \t \t \t 
 
        var compileScope = scope; 
 
        if (attrs.bindHtmlScope) { 
 
         compileScope = scope.$eval(attrs.bindHtmlScope); 
 
        } 
 
        $compile(element.contents())(compileScope); 
 
       }); 
 
      } 
 
     }; 
 
    }); 
 

 
angular.element(function() { 
 
    angular.bootstrap(document, ['myApp']); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.js"></script> 
 
<div ng-controller="myController"> 
 
    <div bind-html-compile="stringAmi"></div> 
 
</div>

+0

私はCordova、GoogleマップとangularJsを使用しています。これはひどいように見えますが、私は今他のエラーがあります:エラー:[$ parse:ueoe]予期しない終了式:demandeAmiNotif( – DionysoSong

+0

@DionysoSong実際にあなたは引用符の代わりにアポストロフィを逃さなければなりません。私は自分の答えを更新しました。 –

+0

ありがとう、よく働いています! – DionysoSong

関連する問題