我希望将一个格式字符串传递给一个指令,并使该指令使用一个对象对其进行内插。问题是,如果我使用花括号角,甚至在创建指令之前就尝试对字符串进行内插。如果我转义花括号,角没有显示对象的值(字符串没有正确内插)。
如何将格式字符串传递给指令?
这是我的演示代码模板:
<div test-directive item-text="{{ x }} - {{ y }}"></div>
角应用程序/指令:
var app = angular.module('plunker', ["test-directive"]);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
});
var dir = angular.module('test-directive', []);
dir.directive("testDirective", ['$interpolate', function($interpolate) {
return {
template: "<div>{{ text }}</div>",
link: function ($scope, element, attrs) {
var obj = {
x: 6,
y: 9
};
$scope.text = $interpolate(attrs.itemText)( obj );
}
}
}]);
演示:http://plnkr.co/edit/vUVVuLVBptEmUcv3y7o4?p=preview
编辑:
用@Lucas的annswer来解决我原来的问题并不能解决这个问题。由于某种原因,即使我没有抹去它,攻击也会被抹去。
请检查301号线:http://plnkr.co/edit/6bjW35D3W1dTGQz9kNSn?p=preview
请注意,itemLabel
在任何地方都没有更改。
发布于 2015-06-08 23:43:11
做这件事的方法是改变它
$scope.text = $interpolate(element.attr(attrs.$attr.itemText))( obj );
发布于 2015-06-09 00:12:23
不确定实际使用情况是什么,但从您的示例来看,您似乎不需要插值(因此您不应该使用它并避免开销)。您(似乎)需要的是在某些上下文(例如obj
)中计算表达式。一种方法是使用方法;例如:
<div test-directive item-text="x+' - '+y" ...
...
link: function postLink(scope, elem, attrs) {
var obj = {x: 6, y: 9};
scope.text = scope.$eval(attrs.itemText, obl);
}
编辑:承认,这超出了简单性的目的,因此这里有另一种使用助手服务来替换开始/结束符号和内插的方法:演示。
https://stackoverflow.com/questions/30725108
复制