不过,我觉得这可能只是我不会在我的代码使用原语是this question重复。我有一个指令,用于将内联svgs动态地放入我的视图中。它的工作原理就像这样:AngularJS:NG-重复了自定义指令与分离范围
app.directive('icon', ['$timeout', function($timeout) {
return {
restrict: "E",
scope: {
href:"@",
title: "@"
},
replace: true,
templateUrl: $timeout(function(elm,attrs) {
var definition = {
add: "add133.svg",
alert: "warning30.svg",
attachment: "attachment13.svg",
call: "auricular6.svg",
calendar: "calendar5.svg",
notify: "church2.svg",
compass: "circular14.svg",
cloud: "cloud127.svg",
addUser: "create1.svg",
delete: "delete30.svg",
trash: "delete48.svg",
servicedesk: "edit26.svg",
email: "email20.svg",
star: "favourites7.svg",
key: "key162.svg",
lock: "lock27.svg",
search: "magnifier12.svg",
menu: "menu48.svg",
print: "printer70.svg",
settings: "settings21.svg",
share: "share12.svg",
customer: "user91.svg"
};
return 'svg/' + definition[attrs.name];
},30000)
}
}]);
最后我让我用一个服务来获取从JSON文件定义列表更新代码,但我只是想试探这个现在。这按预期工作。但是当我重复它时,值突然变得不明确。见下面笔者认为:
<div ng-repeat="link in config.mainlinks" ng-class="{true: 'active', false: 'dormant'}[config.urlCheck('{{link.name}}')]" sys-stack="2">
<a href="{{link.href}}" title="{{link.title}}">
<icon name="{{link.icon}}"></icon>
</a>
</div>
正如你可能从我的代码推断,我在我的控制器名为config定义的模型和模型的属性称为mainlinks。 Mainlinks是为了提供工作所需的代码块的属性的对象,它看起来像这样
mainlinks: {
dash: {
name: "dashbaord",
href: "#dashboard",
title: "Dashboard",
icon: "compass"
}
当它呈现的DOM看起来是这样的:
<div ng-repeat="link in config.mainlinks" ng-class="{true: 'active', false: 'dormant'}[config.urlCheck('calendar')]" sys-stack="2" class="ng-scope ng-isolate-scope z2 dormant">
<a href="#calendar" title="Calendar">
<icon name="{{link.icon}}"></icon>
</a>
</div>
但是像这样的作品细
<span ng-repeat="link in config.mainlinks">
{{link.icon}}
</span>
我的猜测是因为我的测试跨度和我的div块的其他工作部分都在同一范围内,即控制器外壳他们。但图标有其自己的隔离范围,在该范围内,link.icon没有任何意义。我怎样才能解决这个限制?还是我完全脱离基地?
那是因为你attibute值的名字不会被时间templateURL功能势必被调用。您只需按照原样获取文本“{{link.icon}}”即可。SO模板网址返回无效的网址,它无法加载该指令 – PSL 2014-08-29 20:24:23
你可以提供任何建议如何解决它,我更新了我的代码,添加$超时服务希望延迟执行,但它似乎没有任何影响。 – richbai90 2014-08-29 20:39:12
问题是,如果你在可以访问的属性中加载了静态文本,那么你在templateURl中无法真正做到这一点,但在这种情况下,你可能不得不做一些棘手的事情。或者在链接函数中进行替换svg并编译它。 – PSL 2014-08-29 20:41:39