2014-10-29 103 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' 
}); 

这似乎是相当不错的了