我将如何做到这一点是javascipt
var x = 'function(){ ... }'
x = x.toFunction();
x();
例如我一直在使用var x = '...'; eval(x)
,但我读到这很糟糕而且很慢。
如果它有助于我想要完成的是运行一个作为属性传递给<loaded>
的函数,例如:
HTML
<p loaded="test, function(){alert('it worked!')}">
AngularJS
.directive('loaded', function() {
return {
restrict: 'A',
link: function(scope, elem, attr) {
var paramOne = attr.loaded.substr(0, attr.loaded.indexOf(',')) //paramOne = test
var paramTwo = attr.loaded.substr(paramOne.length+1).trim() //paramTwo = "function(){alert('it worked!')"
if (paramOne==='test') paramTwo() //This is where I use to use eval(paramTwo)
}
}
})
这是jsfiddle。
*编辑:* 我不会将此作为答案发布,因为我还不确定......我可能做错了。
var x = "function(){alert('it worked!')";
x = new Function('(' + x + ')()');
x(); //alerts 'it worked!'
如果我的编辑是可行的答案,或者我应该采用全新的方法,请告诉我
答案 0 :(得分:0)
我没有测试这段代码,但我认为这就是这个想法:
.directive('loaded', function() {
return {
restrict: 'A',
scope: {
fn: '&'
}
link: function(scope, elem, attr) {
var paramOne = attr.param1;
if (paramOne === 'test'){
scope.fn();
}
}
}
});
fn
是您希望在链接功能中执行的功能。您可以在控制器内定义此功能。 param1
是您应该在另一个属性中传递的参数(在这种情况下,此属性的值将为'test')。
<p loaded param1='test' fn='fn()'>