我有一个指令,它根据输入属性 id 是否存在来呈现活动或禁用的文件链接。
该指令称为文件链接:
<filelink id="{{resource.id}}" type="{{resource.mimetype}}" name="{{resource.name}}" size="{{resource.size}}" icon="hide"></filelink>
这是指令代码:
.directive('filelink', function() {
return {
restrict: 'E',
replace:true,
scope: true,
template:"<span></span>",
link: function($scope, $element, $attrs){
$attrs.$observe('id', function (value) {
if(value == ""){
$element.append("<span class='heading' href=''> "+$attrs.name+" <i class='icon-lock'></i></span>")
}else{
$element.append("<a class='heading' href='t3a/index.php?id=5&tx_crcdata_crc_data_mgm[controller]=Dataset&tx_crcdata_crc_data_mgm[action]=readFile&tx_crcdata_crc_data_mgm[id]="+$attrs.id+"&tx_crcdata_crc_data_mgm[type]="+$attrs.type+"&tx_crcdata_crc_data_mgm[name]="+$attrs.name+"&tx_crcdata_crc_data_mgm[size]="+$attrs.size+"' style='padding-left: 10px;' title='"+$attrs.name+"'> "+$attrs.name+" </a> ")
}
});
}
};
});
id 值通过控制器外部的解析器异步接收:
DatasetDetailCtrl.resolve = {
dataset: function($route, Package) {
Package.getSinglePackage($route.current.params.datasetId);
},
delay: function($q, $timeout) {
var delay = $q.defer();
$timeout(delay.resolve, 1000);
return delay.promise;
}
};
该指令在 Firefox 16 中运行良好,但在 Chrome 和 IE 中该指令不起作用,因为所有 $attrs 都是“未定义的”。似乎观察异步调用的数据不起作用
任何想法为什么会这样?