如何将 ng-repeat 与图像映射区域标签一起使用?
How to use ng-repeat with image map area tag?
我正在尝试使用 AngularJS 创建可点击的汽车配置文件,一旦我将区域标签属性移动到 auto_parts json 并将它们与 ng-repeat 中的适当属性绑定那么它不起作用。如何解决?
请在整页预览中测试元素。
var app = angular.module('app', []);
app.controller('imgMapCtrl', function($scope, $http) {
$scope.auto_parts = [{
"shape": "circle",
"type": "kolo_przod",
"coords": "193,342,68"
}, {
"shape": "circle",
"type": "kolo_tyl",
"coords": "743,341,68"
}, {
"shape": "poly",
"type": "okno",
"coords": "380,220,494,213,512,149,452,157,421,165,369,192,384,199"
}, {
"shape": "poly",
"type": "okno",
"coords": "536,211,692,202,700,173,664,162,599,152,544,149"
}, {
"shape": "poly",
"type": "drzwi",
"coords": "301,355,510,354,504,334,510,236,516,213,528,144,462,149,419,162,361,190,300,231,293,253,292,312"
}, {
"shape": "poly",
"type": "drzwi",
"coords": "510,352,632,349,702,252,712,211,708,202,716,176,657,156,586,145,528,145,516,213,510,235,504,333"
}]
$scope.partClicked = function(arg) {
alert(arg + ' clicked');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="imgMapCtrl">
<img class="rwdimgmap" src="http://www.mazda.pl/assets/master/cars/all-new-mazda6-sedan/general/12/m6-sedan-red-side.png" alt="auto" width="960" height="540" border="0" usemap="#auto" />
<map name="auto" id="auto">
<area ng-repeat="part in auto_parts" shape="part.shape" coords="part.coords" ng-click="partClicked('{{part.type}}')" title="part.type" />
</map>
</div>
</div>
这仅适用于 HTML 片段:
<map name="auto" id="auto">
<area shape="circle" coords="193,342,68" ng-click="partClicked('kolo_przod')" />
<area shape="circle" coords="743,341,68" ng-click="partClicked('kolo_tyl')" />
<area shape="poly" coords="380,220,494,213,512,149,452,157,421,165,369,192,384,199" ng-click="partClicked('okno_przod')" />
<area shape="poly" coords="536,211,692,202,700,173,664,162,599,152,544,149" ng-click="partClicked('okno_tyl')" />
<area shape="poly" coords="301,355,510,354,504,334,510,236,516,213,528,144,462,149,419,162,361,190,300,231,293,253,292,312" ng-click="partClicked('drzwi_przod')" />
<area shape="poly" coords="510,352,632,349,702,252,712,211,708,202,716,176,657,156,586,145,528,145,516,213,510,235,504,333" ng-click="partClicked('drzwi_tyl')" />
</map>
ngRepeat
部分有问题,应该是:
<area ng-repeat="part in auto_parts" shape="{{part.shape}}" coords="{{part.coords}}" ng-click="partClicked(part.type)" title="{{part.type}}" />
请注意,它是带大括号的 shape="{{part.shape}}"
。否则 part.shape
被解释为字面上的字符串而不是内插的。与 coords
和 title
属性相同。
另一方面,在 ngClick 中不需要插值标签,因为它接受表达式 Angular 将理解:ng-click="partClicked(part.type)"
.
我正在尝试使用 AngularJS 创建可点击的汽车配置文件,一旦我将区域标签属性移动到 auto_parts json 并将它们与 ng-repeat 中的适当属性绑定那么它不起作用。如何解决?
请在整页预览中测试元素。
var app = angular.module('app', []);
app.controller('imgMapCtrl', function($scope, $http) {
$scope.auto_parts = [{
"shape": "circle",
"type": "kolo_przod",
"coords": "193,342,68"
}, {
"shape": "circle",
"type": "kolo_tyl",
"coords": "743,341,68"
}, {
"shape": "poly",
"type": "okno",
"coords": "380,220,494,213,512,149,452,157,421,165,369,192,384,199"
}, {
"shape": "poly",
"type": "okno",
"coords": "536,211,692,202,700,173,664,162,599,152,544,149"
}, {
"shape": "poly",
"type": "drzwi",
"coords": "301,355,510,354,504,334,510,236,516,213,528,144,462,149,419,162,361,190,300,231,293,253,292,312"
}, {
"shape": "poly",
"type": "drzwi",
"coords": "510,352,632,349,702,252,712,211,708,202,716,176,657,156,586,145,528,145,516,213,510,235,504,333"
}]
$scope.partClicked = function(arg) {
alert(arg + ' clicked');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="imgMapCtrl">
<img class="rwdimgmap" src="http://www.mazda.pl/assets/master/cars/all-new-mazda6-sedan/general/12/m6-sedan-red-side.png" alt="auto" width="960" height="540" border="0" usemap="#auto" />
<map name="auto" id="auto">
<area ng-repeat="part in auto_parts" shape="part.shape" coords="part.coords" ng-click="partClicked('{{part.type}}')" title="part.type" />
</map>
</div>
</div>
这仅适用于 HTML 片段:
<map name="auto" id="auto">
<area shape="circle" coords="193,342,68" ng-click="partClicked('kolo_przod')" />
<area shape="circle" coords="743,341,68" ng-click="partClicked('kolo_tyl')" />
<area shape="poly" coords="380,220,494,213,512,149,452,157,421,165,369,192,384,199" ng-click="partClicked('okno_przod')" />
<area shape="poly" coords="536,211,692,202,700,173,664,162,599,152,544,149" ng-click="partClicked('okno_tyl')" />
<area shape="poly" coords="301,355,510,354,504,334,510,236,516,213,528,144,462,149,419,162,361,190,300,231,293,253,292,312" ng-click="partClicked('drzwi_przod')" />
<area shape="poly" coords="510,352,632,349,702,252,712,211,708,202,716,176,657,156,586,145,528,145,516,213,510,235,504,333" ng-click="partClicked('drzwi_tyl')" />
</map>
ngRepeat
部分有问题,应该是:
<area ng-repeat="part in auto_parts" shape="{{part.shape}}" coords="{{part.coords}}" ng-click="partClicked(part.type)" title="{{part.type}}" />
请注意,它是带大括号的 shape="{{part.shape}}"
。否则 part.shape
被解释为字面上的字符串而不是内插的。与 coords
和 title
属性相同。
另一方面,在 ngClick 中不需要插值标签,因为它接受表达式 Angular 将理解:ng-click="partClicked(part.type)"
.