如何在AngularJS模板中调用标准javascript函数
How to call standard javascript functions in AngularJS templates?
我可以在AngularJS大括号/表示法中使用JavaScript函数吗?
我已经尝试了下面的代码。如果你不评论我的JS函数,它们就不起作用。
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="">
<p>Some formula: {{ 1+2 }}</p>
<!--
<p>Some function: {{Math.sin(12)}}</p>
<p>Some constructor: {{new Date()}}</p>
-->
</div>
是否可以解锁/启用?
更新
好吧,在简单的{{}}
中,函数可以封装到UDF中。但是UI网格中单元格模板中的函数呢?我仍然可以在那里使用简单的公式,但不能使用任何函数,甚至不能使用$scope
中定义的UDF。
在下面的示例中,cellTemplateWorks
使用了简单的加法,并且它是有效的。模板cellTemplateNotWorks
使用对myFunction
的调用,不在模板中工作(而在简单占位符中工作)。
var myApp = angular.module('myApp', ['ui.grid', 'myControllers']);
var myControllers = angular.module('myControllers', []);
myControllers
.controller('MyController', ['$scope', function ($scope) {
$scope.myData = [{"x": 1}, {"x": 2}, {"x": 3}, {"x": 4}, {"x": 5}];
var cellTemplateWorks = "<div '
class='"ngCellText'" ng-class='"col.colIndex()'"><span ng-cell-text>'
{{row.entity[col.field]+1}}'
</span></div>";
var cellTemplateNotWorks = "<div '
class='"ngCellText'" ng-class='"col.colIndex()'"><span ng-cell-text>'
{{myFunction(row.entity[col.field])}}'
</span></div>";
$scope.gridOptions = {
data: 'myData',
columnDefs: [
// {field: 'x', displayName: 'x', },
// {field: 'x', displayName: 'sin(x)', cellTemplate: cellTemplateNotWorks},
{field: 'x', displayName: 'sin(x)', cellTemplate: cellTemplateWorks},
]
};
$scope.myFunction = function(arg) {
return Math.sin(arg);
};
}]);
.myGrid {
width: 500px;
height: 250px;
}
<link rel="styleSheet" href="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/3.0.7/ui-grid.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/3.0.7/ui-grid.js"></script>
<body ng-app="myApp">
<div ng-controller="MyController">
<p>MyFunction does work: {{myFunction(12)}}</p>
<p>MyFunction does not work in UI Grid:
<div ui-grid="gridOptions" class="myGrid"></div>
</p>
</div>
</body>
文档中的报价:
Angular表达式与JavaScript表达式Angular表达式类似JavaScript表达式,但有以下差异:
上下文:根据全局窗在Angular中,表达式是根据作用域对象进行计算的。
宽恕:在JavaScript中,尝试评估未定义的属性生成ReferenceError或TypeError。在Angular中,表达式评估对未定义和无效是宽容的。
无控制流语句:不能在Angular表达式:条件、循环或异常。
无函数声明:不能在Angular中声明函数表达式,甚至在ng-init指令中。
不使用文字符号创建RegExp:不能创建正则表达式Angular表达式中的表达式。
不使用新运算符创建对象:您不能在中使用新运算符Angular表达式。
无逗号和无效运算符:不能在角度表达式。
过滤器:您可以在表达式中使用过滤器来格式化之前的数据显示。
如果你想运行更复杂的JavaScript代码,你应该让它控制器方法,并从视图中调用该方法。如果你想eval()一个角度表达式,使用$eval(()方法。
最后一段解释了建议的执行方式。
更新:
看起来您正在使用UI网格。表达式不起作用的原因是,这个网格的作用域与您声明函数的作用域不同。如果你想访问控制器的作用域,你应该使用grid.appScope
:
var cellTemplateNotWorks = "<div '
class='"ngCellText'" ng-class='"col.colIndex()'"><span ng-cell-text>'
{{grid.appScope.myFunction(row.entity[col.field])}}'
</span></div>";
在本例中,您可以使用grid.appScope
访问模板内的myFunction
。
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 在 Jasmine 测试中将 console.log() 的调用重定向到标准输出
- 如何在AngularJS模板中调用标准javascript函数
- 返回jquery ajax调用的成功或失败标准
- 使用非标准密钥长度调用CryptoJS.AES.encrypt/decrypt时,如何处理AES密钥
- 覆盖CRM网格中双击事件调用的标准方法
- 从MVC调用Javascript的标准实践
- Ajax提交与标准Ajax调用的CORS问题
- 一个标准的AJAX调用应该如何完成,成功和错误部分
- Node.js调用perl脚本并获得标准输出