2014-10-29 107 views
0

我正在創建一個彈出式模式,我希望能夠使用新創建的$scope動態更新。我想要做這樣的事情:如何使用新創建的範圍編譯AngularJS模板?

var myNewScope = $scope.$new(); 
myNewScope.name = 'Jack'; 

ModalService.open('Hello, {{ name }}', myNewScope); 

然後在我的ModalService.open方法我想編譯字符串,像這樣

// ... other service stuff 

service.open = function(template, scope){ 
    var compiledText = $compile(template)(scope); 
    // I want compiledText = 'Hello, Jack' 
} 
+0

哦,我只是意識到,它的工作,如果我換我的模板像'ModalService.open一個實際的DOM元素(」

您好,{{名}}

')'..爲什麼它需要這樣?如果我只想要沒有實際元素的字符串呢? – 2014-10-30 00:03:09

+0

目前尚不清楚你想要什麼。基於這個問題和你自己的答案,似乎你想要'$ interpolate'。另一方面,「動態更新」不適用於您的答案。而且我想知道爲什麼你想要自己插入文本。 – zeroflagL 2014-10-30 09:21:04

回答

0

韋爾普給定的範圍......我不認爲有角一個內置的方式來做到這一點..所以我只是建立自己的版本。

app.controller('TestController', function($scope, $compile){ 

    var scope = $scope.$new(); 
    scope.percentage = {Value:55}; 
    scope.name = 'Jack'; 

    var msg = 'We are at {{ percentage.Value }}% done, {{ name }}.. {{ 4/3 }}'; 

    var element = msg.replace(/{{\s*([a-zA-Z0-9+-/*//\s.]*)\s*}}/g, function($0, $1){ 
    return scope.$eval($1); 
    }); 

    console.log(element); // prints 'We are at 55% done, Jack.. 1.3333333333333333' 
}); 

這似乎是相當不錯的了