位于 HTML 文件中的角度变量中的特殊字符

Special chars in angular variable located in HTML file

本文关键字:变量 特殊字符 HTML 位于 文件      更新时间:2023-09-26

在我的html中的某个时刻,我正在做这样的事情:

<li ng-repeat="favorite in favorites track by $index">
  <a ng-href="javascript:void(0)" ng-click="changeSVG(favorite)">
    <i class="fa fa-sitemap"></i>{{favorite}}
  </a>
</li>

问题是有时ng-click="changeSVG(favorite)"中的favorite包含特殊字符,例如 ' .所以我在控制台中收到这样的错误:

错误: [$parse:lexerr

] http://errors.angularjs.org/1.3.14/$parse/lexerr?p0=Unterminated%20quote&p1=s%2042-44%20%5B')%5D&p2=changeSVG('Process%20passageNaN'ordre%20MOB') 错误(本机)

我怎样才能防止这种情况?

我在研究它时听说过$sce,但不确定它是否符合我的需求以及如何在我的控制器中使用它。

这是changeSVG()函数:

$scope.changeSVG = function (svgName) {
    var defaultZoom = getZoomFromCarto(svgName);
    $scope.currentCartography = svgName;
    $scope.currentZoom = defaultZoom;
    if ($scope.cartoHistory.indexOf(svgName) != -1)
        $scope.cartoHistory.splice($scope.cartoHistory.indexOf(svgName), 1);
    $scope.cartoHistory.unshift(svgName)
    if ($scope.cartoHistory.length > 20)
        $scope.cartoHistory = $scope.cartoHistory.slice(0, 20);
    localStorage.setItem("cartoHistory", JSON.stringify($scope.cartoHistory));
    removeEmbed();
    var svgPath = "SVG/" + $scope.currentLanguage + "/" + svgName + ".svg";
    lastEmbed = createNewEmbed(svgPath, defaultZoom);
}

我尝试在日志中显示 svgPath,它适用于普通文件,但是当我尝试使用名称中包含(空格)和favorite的文件时,什么都没有显示。

当 Angular 用字符串替换函数调用时$index时,会出现此问题。解决方案可以使用favorites作为函数参数,因此您可以从数组中读取CC_9控制器代码,添加可能需要的任何验证。并且不会发生角度的弦更换魔法。

像这样:

模板:

<li ng-repeat="favorite in favorites track by $index">
  <a ng-href="javascript:void(0)" ng-click="changeSVG($index)">
    <i class="fa fa-sitemap"></i>{{favorite}}
  </a>
</li>

控制器:

$scope.changeSVG = function (index) {
    // Add any validation logic here.
    var svgName = favorites[index];
    var defaultZoom = getZoomFromCarto(svgName);
    $scope.currentCartography = svgName;
    $scope.currentZoom = defaultZoom;
    if ($scope.cartoHistory.indexOf(svgName) != -1)
        $scope.cartoHistory.splice($scope.cartoHistory.indexOf(svgName), 1);
    $scope.cartoHistory.unshift(svgName)
    if ($scope.cartoHistory.length > 20)
        $scope.cartoHistory = $scope.cartoHistory.slice(0, 20);
    localStorage.setItem("cartoHistory", JSON.stringify($scope.cartoHistory));
    removeEmbed();
    var svgPath = "SVG/" + $scope.currentLanguage + "/" + svgName + ".svg";
    lastEmbed = createNewEmbed(svgPath, defaultZoom);
}