AngularJS 将数据传递到模板视图
AngularJS pass data to template view
我正在使用 angular-leaflet-directive,我想在单击标记时显示模板。我从网络服务器获取标记,并将它们存储在本地数组中。我创建标记的方式是:
$rootScope.markers.push({
lat: parseFloat(DeviceInfo[i].Position.Y),
lng: parseFloat(DeviceInfo[i].Position.X),
message: "<div ng-include src=\"'templates/markerTemplate.html'\"></div>",
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
});
在 for 循环内,遍历 DeviceInfoArray。
每个标记都在 /templates/markerTemplate.html 中显示模板。这是一个长文件,但它位于
<div ng-controller="MarkerController">
并且有一些{{values}}。
是否有某种方法可以绑定模板中的值或从 rootScope 或创建标记的控制器中获取它们?
我无法按照教程中的说明使用 ng-repeat,因为我创建的对象(不同的标记)与创建标记的控制器不同。我有一个服务返回 DeviceInfo 中的数据,但我不想在每次单击标记时都查询它。
示例标记:
marker1: {
lat: 50,
lng: 20,
message: "<div ng-include src=\"'templates/markerTemplate.html'\"></div>",
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
}
$scope.Devices[1].deviceData: {
LastUpdate: "01/01/2015 12:14",
Position: {
X: 50,
Y: 20
},
Speed: 30,
DeviceIdentifier: "DeviceName1"
}
marker2: {
lat: 55,
lng: 25,
message: "<div ng-include src=\"'templates/markerTemplate.html'\"></div>",
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
}
$scope.Devices[2].deviceData: {
LastUpdate: "02/23/2015 13:14",
Position: {
X: 55,
Y: 25
},
Speed: 45,
DeviceIdentifier: "DeviceName2"
}
<div ng-controller="markerController">
<font style="font-size:12px; font-weight:bold">{{deviceData.DeviceIdentifier}}</font>
<table width="100%">
<tbody>
<tr>
<td><strong>Speed: </strong>
</td>
<td>{{deviceData.Speed}} km/h</td>
</tr>
<tr>
<td><strong>Update: </strong>
</td>
<td>{{deviceData.LastUpdate}}</td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
</tbody>
</table>
<div><strong>Location: </strong>{{deviceData.Location}} (X:{{deviceData.Position.X}}Y:{{deviceData.Position.Y}})
</div>
</div>
html 是 markerTemplate.html(我想将数据与 devices[] 的元素绑定的视图。
devices[] 是一个名为 mapController(和 rootScope)的控制器内的数组,它包含我想要显示的所有数据。我希望上面的模板从这个数组的元素中获取值。
我认为您可以重构一下您的代码。在我看来,您不需要为每个标记包含一个新控制器。因此,假设您有一个简单的控制器 MyController 及其视图模板。所以你可以尝试这样的事情:
我的控制器:
$scope.markers.push({
device: DeviceInfo[i],
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
});
MyController 的视图:
<div class="my-marker" ng-repeat="marker in markers">
<b>{{marker.device.deviceData.DeviceIdentifier}}</b>
<table>
<tbody>
<tr>
<td><strong>Speed: </strong>
</td>
<td>{{marker.device.deviceData.Speed}} km/h</td>
</tr>
<tr>
<td><strong>Update: </strong>
</td>
<td>{{marker.device.deviceData.LastUpdate}}</td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
</tbody>
</table>
<div><strong>Location: </strong>{{marker.device.deviceData.Location}} (X:{{marker.device.deviceData.Position.X}}Y:{{marker.device.deviceData.Position.Y}})
</div>
</div>
CSS:
.my-marker b{
font-size: 12px;
}
.my-marker table{
width: 100%;
}
我刚看到你的问题,我也面临着完全相同的问题。我所做的是在 ng-src div 中使用 ng-init,并为每个标记指定一个特定的 id,然后我可以使用它从范围中检索数据。例如:
message: "<div ng-init='post=" + post.id + "'id='marker-data' ng-include src=\"'../templates/marker-message.html'\"></div>"
其中 post.id 是唯一标识符。现在我只是在我的标记模板文件中使用类似的东西。
{{posts[post]}}
得到我的独一无二post
我正在使用 angular-leaflet-directive,我想在单击标记时显示模板。我从网络服务器获取标记,并将它们存储在本地数组中。我创建标记的方式是:
$rootScope.markers.push({
lat: parseFloat(DeviceInfo[i].Position.Y),
lng: parseFloat(DeviceInfo[i].Position.X),
message: "<div ng-include src=\"'templates/markerTemplate.html'\"></div>",
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
});
在 for 循环内,遍历 DeviceInfoArray。
每个标记都在 /templates/markerTemplate.html 中显示模板。这是一个长文件,但它位于
<div ng-controller="MarkerController">
并且有一些{{values}}。
是否有某种方法可以绑定模板中的值或从 rootScope 或创建标记的控制器中获取它们?
我无法按照教程中的说明使用 ng-repeat,因为我创建的对象(不同的标记)与创建标记的控制器不同。我有一个服务返回 DeviceInfo 中的数据,但我不想在每次单击标记时都查询它。
示例标记:
marker1: {
lat: 50,
lng: 20,
message: "<div ng-include src=\"'templates/markerTemplate.html'\"></div>",
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
}
$scope.Devices[1].deviceData: {
LastUpdate: "01/01/2015 12:14",
Position: {
X: 50,
Y: 20
},
Speed: 30,
DeviceIdentifier: "DeviceName1"
}
marker2: {
lat: 55,
lng: 25,
message: "<div ng-include src=\"'templates/markerTemplate.html'\"></div>",
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
}
$scope.Devices[2].deviceData: {
LastUpdate: "02/23/2015 13:14",
Position: {
X: 55,
Y: 25
},
Speed: 45,
DeviceIdentifier: "DeviceName2"
}
<div ng-controller="markerController">
<font style="font-size:12px; font-weight:bold">{{deviceData.DeviceIdentifier}}</font>
<table width="100%">
<tbody>
<tr>
<td><strong>Speed: </strong>
</td>
<td>{{deviceData.Speed}} km/h</td>
</tr>
<tr>
<td><strong>Update: </strong>
</td>
<td>{{deviceData.LastUpdate}}</td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
</tbody>
</table>
<div><strong>Location: </strong>{{deviceData.Location}} (X:{{deviceData.Position.X}}Y:{{deviceData.Position.Y}})
</div>
</div>
devices[] 是一个名为 mapController(和 rootScope)的控制器内的数组,它包含我想要显示的所有数据。我希望上面的模板从这个数组的元素中获取值。
我认为您可以重构一下您的代码。在我看来,您不需要为每个标记包含一个新控制器。因此,假设您有一个简单的控制器 MyController 及其视图模板。所以你可以尝试这样的事情:
我的控制器:
$scope.markers.push({
device: DeviceInfo[i],
icon: {
iconUrl: url,
iconSize: [39, 39],
iconAnchor: [19, 19],
popupAnchor: [-19, -19]
}
});
MyController 的视图:
<div class="my-marker" ng-repeat="marker in markers">
<b>{{marker.device.deviceData.DeviceIdentifier}}</b>
<table>
<tbody>
<tr>
<td><strong>Speed: </strong>
</td>
<td>{{marker.device.deviceData.Speed}} km/h</td>
</tr>
<tr>
<td><strong>Update: </strong>
</td>
<td>{{marker.device.deviceData.LastUpdate}}</td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
</tbody>
</table>
<div><strong>Location: </strong>{{marker.device.deviceData.Location}} (X:{{marker.device.deviceData.Position.X}}Y:{{marker.device.deviceData.Position.Y}})
</div>
</div>
CSS:
.my-marker b{
font-size: 12px;
}
.my-marker table{
width: 100%;
}
我刚看到你的问题,我也面临着完全相同的问题。我所做的是在 ng-src div 中使用 ng-init,并为每个标记指定一个特定的 id,然后我可以使用它从范围中检索数据。例如:
message: "<div ng-init='post=" + post.id + "'id='marker-data' ng-include src=\"'../templates/marker-message.html'\"></div>"
其中 post.id 是唯一标识符。现在我只是在我的标记模板文件中使用类似的东西。
{{posts[post]}}
得到我的独一无二post