我创建了用于替换字符串值
的angular指令applabel指令:
app.directive('applabel',function(){
return{
templateurl:'label.html',
restrict: 'E',
replace: true,
scope:{
'key' : '@',
'default' : '@'
},
link : function(scope,elem,attr){
var data = [{key: Id , value:"ID"},
{ key: name, value: "Name"},
{ key: sts, value: "status"} ];
var keyVal = scope.key;
for(var i = 0;i < data.length ; i++)
{
if(keyVal = data.length[i].key)
{
scope.value = data.length[i].value;
}
else {
scope.value = scope.default;
}
}
}
}
});
我的HTML代码是
<applabel key="name" default="Default Name">
</applabel>
label.html
<label>{{value}}</label>
输出将是:名称
此代码正常运行 但问题是我不希望在我的代码中循环,因为在数据数组中有太多的数据,我在我的页面中多次使用这个'applabel'指令,因此需要花费很多时间
任何没有循环我的值的解决方案都会被替换
提前致谢
答案 0 :(得分:0)
如果您可以修改数据,则可以使用对象而不是数组。这种方式访问值是在恒定时间内完成的
app.directive('applabel',function(){
return{
templateurl:'label.html',
restrict: 'E',
replace: true,
scope:{
'key' : '@',
'default' : '@'
},
link : function(scope,elem,attr){
var data = {Id:{value:"ID"},
name: {value: "Name"},
sts:{ value: "status"} };
var keyVal = scope.key;
scope.value=typeof data[keyVal] !=="undefined" ? data[keyVal].value : scope.default;
}
}
}
});
如果您不需要向对象添加更多信息,则可以执行
var data = {Id:"ID", name:"Name", sts:"status"};
var keyVal = scope.key;
scope.value=typeof data[keyVal] !=="undefined" ? data[keyVal] : scope.default
答案 1 :(得分:0)
如果您将数据作为数组,则查找某些数据的唯一方法是迭代,如果您不想迭代,则可以将数据保存为哈希映射(JS对象)
答案 2 :(得分:0)
此代码有几个错误,但我想这是无关紧要的。
不使用每个都包含键和值字段的对象数组,而是使用单个对象:
{
Id: 'ID',
name: 'Name',
sts: 'status
}
然后只需使用
scope.value = data[scope.key] || scope.default;
您应该做的另一件事是从链接函数中定义数据:每次使用该指令时都无法重新创建一个全新的数组/对象。
答案 3 :(得分:0)
我发现underscorejs是一个非常有用的库,可以包含在我的项目中。有了它,您可以使用一些功能来获得您想要的东西。一个是_.find
var result = _.find(data, function(x){ return x.key === scope.key; });
scope.value = result.value;
&#13;