gpt4 book ai didi

javascript - 将 JQuery 函数更改为 AngularJS

转载 作者:行者123 更新时间:2023-11-28 01:42:09 25 4
gpt4 key购买 nike

我正在将使用 Razor 和 JQuery 创建的用户列表/表更改为 AngularJS。此 的功能之一是能够显示/隐藏其他用户详细信息。该表有两组 tr,第二组是 display:none 但当其上方的 tr 被点击时会向下滑动/可见显示详细信息。

示例(原创) Working Example

enter image description here

我尝试将代码应用到我的 AngularJS,但由于某种原因它似乎不起作用(也没有错误)

原始代码(骨架)

<table>
<tr class="col-xs-12">
<td class="col-xs-2">@Html.DisplayFor(modelItem => item.name)</td>
<td class="col-xs-2">@Html.DisplayFor(modelItem => item.email)</td>
// ect...
</tr>
<tr class="col-xs-12" style="display:none">
<td colspan="12">
<p>
@Html.DisplayFor(other stuff)
</p>
</td>
</tr>
</table>

新的 AngularJS 代码

<table class="table table-striped col-xs-12">
<tbody ng-repeat="actors in Users">
<tr class="col-xs-12">
<td class="col-xs-2">{{actors.name}}</td>
<td class="col-xs-2">{{actors.email}}</td>
// ect...
</tr>
<tr class="col-xs-12" style="display:none">
<td colspan="6">
<p>
{{actors.otherThings}}
</p>
</td>
</tr>
</tbody>
</table>

JQuery(原来有 td[colspan=12] 而不是 td[colspan=6])

<script>
// Toggle Additional Details
$(function () {
$("td[colspan=6]").find("p").hide();
$("td[colspan=6]").addClass("nopadding");

// && !$(e.target).is('span')
$("tr").click(function (e) {
if (!$(e.target).is('button') && !$(e.target).is('input') && !$(e.target).is('select')) {
var $target = $(this);
var $detailsTd = $target.find("td[colspan=6]");
if ($detailsTd.length) {
$detailsTd.find("p").slideUp();
$detailsTd.addClass("nopadding");
} else {
$detailsTd = $target.next().find("td[colspan=6]");
$detailsTd.find("p").slideToggle();
$detailsTd.toggleClass("nopadding");
}
}
});
});
</script>

CSS

/* Removes padding from interactive rows */
.table > tbody > tr > td.nopadding {
padding: 0px;
}

我还是 AngularJS 的新手,所以也许我遗漏了一些简单的东西,但我只想能够扩展显示/隐藏额外的 tr。不确定为什么它不适用于我的 Angular 代码。

AngularJS

var app = angular.module("app", ['ngRoute', 'ngResource']);

app.config(function ($routeProvider) {
$routeProvider

.when('/', {
templateUrl: '/pages/home.html',
controller: 'HomeController'
})

.when('/home', {
templateUrl: '/pages/home.html',
controller: 'HomeController'
})

.when('/unknown', {
templateUrl: '/pages/unknown.html',
controller: 'UnknownController'
})
.otherwise({
templateUrl: '/pages/home.html',
controller: 'HomeController'
});
});


app.factory('userService', function ($http) {
var userService = {};
userService.getUsers = function () {
return $http({
url: '/API/APITest',
method: "GET"
})
}
return userService;
});


app.controller('HomeController', function ($scope, userService, $resource, $http) {
$scope.orderByField = 'name';
$scope.reverseSort = false;
$scope.ordering = "(ascending)";

$scope.orderByFieldFunction = function (value) {
$scope.reverseSort = !$scope.reverseSort;
$scope.orderByField = value;
if ($scope.reverseSort === false) {
$scope.ordering = "(ascending)";
} else {
$scope.ordering = "(descending)";
}
}
userService.getUsers().success(function (users) {
$scope.Users = users;
});
});

app.controller('UnknownController', function ($scope, userService, $resource, $http) {
$scope.title = "404 - Does Not Exist";
});

最佳答案

如果这是您想要的,您可以像这样在指令中添加 jQuery:

示例:http://jsfiddle.net/58mLfw6z/

AngularJS 指令

app.directive('showmore',function() {
return {
restrict:'A',
link: function(scope,element,attr) {
element.on('click',function() {
element.next('tr').toggle();
});
}
}
});

// or apply a flag to the model with an ng-click on the tr
$scope.more = function(actor) {
if (!actor.more) {
actor.more = true;
}
else {
actor.more = false;
}
};

HTML

<table>
<tbody ng-repeat="actors in Users">
<tr showmore ng-click="more(actors)">
<td class="col-xs-2">{{actors.name}}</td>
<td class="col-xs-2">{{actors.email}}</td>
</tr>
<tr style="display:none;">
<td colspan="2">
<p>
{{actors.otherThings}}
</p>
</td>
</tr>
</tbody>
</table>

关于javascript - 将 JQuery 函数更改为 AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com