2014-05-14 20 views
0

我試圖使用$compile在控制器內創建一個元素,但無法讓它工作。

$scope.open_svg = function(){ 
    var sc = $scope.$new(true); 
    sc.fill = "#0000ff"; 
    var t = '<svg xmlns="http://www.w3.org/2000/svg" '+ 
      'xmlns:xlink="http://www.w3.org/1999/xlink"> ' + 
      '<rect ng-attr-x="10" y="10" height="100" width="100" ' + 
      'style="stroke:#ff0000; fill:{{fill}}"/> ' + 
      '</svg>'; 
    var svg = $compile(t)(sc); 
    open("data:image/svg+xml,\n" + encodeURIComponent(svg[0].outerHTML)); 
} 

此相同的代碼在指令中正常工作。但正如你所看到的,我試圖打開一個新窗口,以便用戶可以保存SVG,並且我想這樣做,而不需要代碼在指令

回答

2

它爲我工作,只要當你執行該功能;)這就是你可能會失蹤。 你真的應該考慮將這個問題轉到一個指令。不建議在控制器中使用html代碼。

+0

是的,你幾乎是對的,我添加了我發現的答案。至於代碼中沒有HTML,我沒有。 SVG被渲染在一個單獨的對象中,我只是想打開它來保存。而這個功能只是創建一個新窗口。 – xcorat

0

實際上,代碼本身幾乎沒問題,但由於$ compile服務是異步的,所以在編譯完成後應該打開窗口。否則,綁定不會被解析。

所以只是增加了一個暫停,

setTimeout(function(){ 
     var data_url = "data:image/svg+xml,\n" + encodeURIComponent(svg[0].outerHTML); 
     $window.open(data_url, '_blank', 'toolbar=0,location=0,menubar=1'); 
    }); 

和它的作品。