2014-08-28 8 views
7

Ich habe versucht, ein Suchformular einzurichten, wo ich das Formular Action-Attribut injizieren kann.Winkelsatz Formular Aktion basierend auf Variable im Bereich

In meiner Form habe ich

<form action="{{action}}"> 

Da ist in meinem Controller Ich habe

$scope.action = "http://www.somesite.com" 

, dass mir ein interpolieren Fehler gibt, weil es nicht vertrauenswürdigen hat "http:" in der Zeichenkette. Wie komme ich dazu? Ich weiß, dass ich ng-bind-html verwenden kann, um html in dom zu setzen, aber ich weiß nicht, ob ich das nur mit einem Attribut arbeiten lassen kann.

Hat jemand anderes dieses Problem gehabt. Ich denke wirklich nicht darüber nach.

Dank

Antwort

4

wenn Sie Angularjs 1.2 oder höher verwenden, haben Sie Zugriff auf die Strict Contextual Escaping Service, $sce.

SCE hilft dabei, Code so zu schreiben, dass (a) standardmäßig sicher ist und (b) die Überwachung von Sicherheitslücken wie XSS, Clickjacking usw. viel einfacher macht.

Innerhalb von $ sce können Sie eine Variable an $sce.trustAsUrl(value) übergeben, um den ursprünglichen Wert zu erhalten. So Sie sollte der Lage sein, zu verwenden:

$scope.action = $sce.trustAsUrl("http://www.somesite.com");

+0

Danke für die Antwort. Es hat es nicht in meiner App repariert, aber ich habe gerade das gleiche Konzept hier http://jsfiddle.net/7v2mz24v/ getestet und aus irgendeinem Grund muss ich nichts davon tun, und es funktioniert gut. Ich kann nicht sehen, warum es ein Problem in meiner anderen App ist. – hooligan

+0

hmm, da dieser Code, den Sie in Ihrer Frage gepostet haben, in einer Geige richtig funktioniert, ist es kein Problem mit dem Code, eher ein Problem mit der von Ihnen verwendeten Version von angular.js oder etwas anderes im Programm, das davon betroffen ist. Es ist mehr Code erforderlich, um das Problem zu bewerten. – Claies

+3

Verwaltet, um es funktionieren zu lassen, ich weiß nicht, warum es in der Geige funktioniert, und ich muss $ sce.trustAsResourceUrl() verwenden, um es an die Formularaktion zu übergeben. Danke für den Tipp auf das $ sce-Zeug. – hooligan

11

Ich stimme Antwort mit Hooligan. Aus irgendeinem Grund scheint $ sce.trustAsURL nicht zu funktionieren. Stattdessen hat $ sce.trustAsResourceUrl ('') für mich funktioniert.

+1

Yep sieht definitiv vertrauenswürdigAsResourceUrl in Winkel 1.4.7 – captainclam

Verwandte Themen