如何在AngularJS模板中调用标准javascript函数?
我可以在AngularJS花括号/符号中使用JavaScript函数吗 我已经尝试了下面的代码。如果你取消注释我的JS函数,它们就不起作用了如何在AngularJS模板中调用标准javascript函数?,javascript,angularjs,Javascript,Angularjs,我可以在AngularJS花括号/符号中使用JavaScript函数吗 我已经尝试了下面的代码。如果你取消注释我的JS函数,它们就不起作用了 一些公式:{1+2} 引自: 角度表达式与JavaScript表达式角度表达式是 类似于JavaScript表达式,但有以下区别: 上下文:JavaScript表达式根据全局 窗户。在Angular中,表达式根据范围对象求值 宽恕:在JavaScript中,尝试评估未定义的属性 生成ReferenceError或TypeError。角度、表情 计算允许
一些公式:{1+2}
引自:
角度表达式与JavaScript表达式角度表达式是
类似于JavaScript表达式,但有以下区别:
上下文:JavaScript表达式根据全局
窗户。在Angular中,表达式根据范围对象求值
宽恕:在JavaScript中,尝试评估未定义的属性
生成ReferenceError或TypeError。角度、表情
计算允许为未定义和空
无控制流语句:不能在角度视图中使用以下语句:
表达式:条件、循环或异常
无函数声明:不能以角度声明函数
表达式,甚至在ng init指令内部
不使用文字符号创建RegExp:无法创建正则表达式
角度表达式中的表达式
不使用新操作符创建对象:不能在中使用新操作符
有棱角的表情
无逗号和Void运算符:不能在
角度表达
过滤器:您可以在表达式中使用过滤器来格式化数据
展示它
如果您想运行更复杂的JavaScript代码,应该将其设置为
方法,并从视图中调用该方法。如果你想
eval()对于角度表达式,请使用$eval()方法
最后一段解释了建议的实现方法
更新: 看起来您正在使用UI网格。表达式不起作用的原因是,此网格的作用域与声明函数的网格的作用域不同。如果要访问控制器的作用域,应使用:
var cellTemplateNotWorks=”\
{{grid.appScope.myFunction(row.entity[col.field])}\
";
在本例中,您可以使用
grid.appScope访问模板内部的myFunction
否,在AngularJS中,您可以通过“卷曲克拉斯”调用函数
你不能用那种方式声明函数。据我所知,你不能在AngularJS中的花括号内有函数。所以如果我能做到这一点,如何调用函数?我看不到任何禁止使用函数调用的规定。那么为什么它们不起作用呢?它们不起作用是因为它不受支持。如果要计算一些涉及函数调用的复杂表达式,只需将此逻辑封装在$scope
变量上的函数中,然后调用此函数。那么,您的意思是不支持调用标准函数,而支持调用用户定义的函数?是的,没错,您可以调用$scope
对象上定义的函数。例如,您可以在控制器中定义一个函数:$scope.myFunction=function(x){return Math.sin(x);}
,然后在表达式中使用此函数:{{myFunction(12)}
。请查看我的更新。我已经定义了这个函数,并且它起作用了。但它只在简单的{}
中起作用。如果我在uigrid
中使用嵌套结构,它仍然不起作用。是否可以导入父上下文或其他内容?
var cellTemplateNotWorks = "<div \
class=\"ngCellText\" ng-class=\"col.colIndex()\"><span ng-cell-text>\
{{grid.appScope.myFunction(row.entity[col.field])}}\
</span></div>";