我有一个包含3种不同类型字符的字符串,具有特殊含义。我有一个迭代160次的循环,并且对于循环的每次迭代,我想检查字符串中的当前字符。因此,如果它是循环的第一次迭代,我想检查字符串中的第一个位置并检查它是什么类型的字符。如果是第二次迭代,我想检查字符串etcetc中的第二个位置。
如何在AngularJS中执行此操作?
我从我的php后端返回字符串。
以下是PHP中的解决方案,但我希望它能与AngularJS一起使用:
<?php
$string = "........####........
.....##..##.........
......#.......&&&&&&
......&&&&&&........
.&..&&&....%..##.&&&
&&......##......&&&.
....................
.#..................";
$k = 1;
for($j = 1; $j <= 8; $j++)
{
echo "<tr>";
for($i = 1; $i <= 20; $i++)
{
if($string[$k] == "#")
{
echo "<td id='$k'>#</td>";
}
elseif($string[$k] == "&")
{
echo "<td class='click' val='water' id='$k'>&</td>";
}
else
{
echo "<td class='click' id='$k'><a href='#'></a></td>";
}
$k++;
}
echo "</tr>";
}
?>
这是我在AngularJS中的控制器:
gameApp.controller("gameCtrl", function($scope,$http,link,$location) {
$scope.trr = [1,2,3,4,5,6,7,8];
$scope.tdd = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
$scope.getMonsters = "1";
var map;
$http.post("lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
map = data;
console.log(map);
});
if(link.user) {
/*$scope.message = "fisk";
console.log(link.user);*/
} else {
/*$scope.message = "Ledsen fisk";
console.log("Är inte satt");*/
}
});
这是我的PHP后端:
<?php
session_start();
include("classes.php");
$data = file_get_contents("php://input");
if(isset($data))
{
$objData = json_decode($data);
$login = new User();
echo $login->doLogin($objData->username, $objData->password);
if(isset($objData->monsters))
{
$string = "........####.............##..##...............#.......&&&&&&......&&&&&&.........&..&&&....%..##.&&&&&......##......&&&......................#..................";
echo $string;
}
}
这是我的looop的HTML:
<div ng-controller="gameCtrl">
<table>
<tr ng-repeat="row in trr">
<td ng-repeat="r in tdd"></td>
</tr>
</table>
</div>
任何可以帮助我的人?
&GT;
答案 0 :(得分:0)
好吧,你只需在Javascript中创建一个完全相同的函数:
function makeTableFrom(str) {
var k = 1,
result = "";
for (var i = 1; i <= 8; i++) {
result += '<tr>';
for (var j = 1; j <= 20; j++) {
if (str[k] === '#') {
result += '<td id="' + k + '">#</td>';
}
else if (str[k] === '&') {
result += '<td class="click" val="water" id="' + k + '">&</td>';
}
else {
result += '<td class="click" id="' + k + '"><a href="#"></a></td>';
}
k++;
}
result += '</tr>';
}
return result;
}
并从您的帖子请求的成功函数中调用它:
$http.post("lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
map = data;
console.log(map);
// say result is declared outside
result = makeTableFrom(data);
// now use it as intended
});
但是,让我清楚一点,在您的php函数或此函数中,您对$string[$k]
或str[k]
的调用应与k-1
一致,因为字符串索引...
这是一个指向JSFiddle的链接,用于说明差异:http://jsfiddle.net/jpreynat/hmutk1y5/
<强>更新强>
要将结果字符串用作表格的内部HTML,您应该将ng-bind-html
与ngSanitize模块结合使用,如下所示:
<div ng-app="gameApp">
<div ng-controller="gameCtrl">
<table ng-bind-html="gameTable">
</table>
</div>
</div>
然后不要忘记将angular-sanitize.js添加到您的资源并将其添加到您的应用中:
angular.module('gameApp', ['ngSanitize'])
编辑$http.post().success()
功能:
$http.post("lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
map = data;
console.log(map);
$scope.gameTable = makeTableFrom(data); // Where you update the table depending on your ajax call
});
链接到更新后的JSFiddle:http://jsfiddle.net/jpreynat/hmutk1y5/1/