2015-06-12 6 views
9

में स्थित मेरी html में एक बिंदु पर चर में विशेष वर्ण मैं इस तरह बातें कर रहा हूँ:कोणीय 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' की तरह विशेष वर्ण है। इसलिए मुझे इस तरह की त्रुटियों को कंसोल में मिल रहा है:

Error: [$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') at Error (native)

मैं इसे कैसे रोक सकता हूं?

मैंने इसे देखने पर $ 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 प्रदर्शित करने के लिए कोशिश की, यह सामान्य फाइलों के साथ ठीक काम करता है, लेकिन जब मैं (स्थान) और में ' के साथ मेरी फाइल के साथ की कोशिश अपने नाम, कुछ भी प्रदर्शित नहीं होता है।

+0

आप की कोशिश की है 'changeSVG (favorite.toString())' या 'favorite.replace की तरह एक regex (/ \ '/ g, "\'") '? – Freezystem

+0

अच्छा विचार, मैंने अभी कोशिश की है, लेकिन यह – Ellone

+1

काम नहीं करता है और यह: 'पसंदीदा.replace (/ \'/g, "'") 'या' sce.trustAsHtml (पसंदीदा) ' – Freezystem

उत्तर

1

समस्या तब होती है जब कोणीय एक स्ट्रिंग द्वारा आपके फ़ंक्शन कॉल पर favorite को प्रतिस्थापित करता है। एक समाधान का उपयोग पैरामीटर पैरामीटर के रूप में $index का उपयोग किया जा सकता है, ताकि आप अपने नियंत्रक कोड पर सरणी favorites से पढ़ सकें, जिसमें आपको आवश्यक सत्यापन हो। और कोई कोणीय स्ट्रिंग प्रतिस्थापन जादू नहीं होगा।

कुछ की तरह:

टेम्पलेट:

<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); 
} 
संबंधित मुद्दे