AngularJSの新機能です。私はASP.Net MVCとAngularJSを使用するWebサイトで作業しています。このサイトには、基本的な機能追加/更新/削除/取得機能があります。私は角度ルーティングを使ってサイトをナビゲートしています。ルーティングコードを以下に示す:AngularJsの編集ビューでデータを表示する方法
var app = angular.module("paymentApp", ['ngRoute']);
app.config(function ($routeProvider, $locationProvider) {
$routeProvider
.when("/", {
templateUrl: "payment/EditPayment/1",
controller: "paymentController"
})
.when("/MakePayment", {
templateUrl: "payment/MakePayment",
controller: "paymentController"
})
.when("/SearchPayment", {
templateUrl: "payment/SearchPayment",
controller: "paymentController"
})
.when("/EditPayment/:payid", {
templateUrl: function (params) { return "payment/EditPayment/" + params.payid },
controller: "paymentController"
})
.when("/DeletePayment/:id", {
templateUrl: function (params) { return "payment/DeletePayment/" + params.id },
controller: "paymentController"
})
.when("/Flush", {
templateUrl: "payment/InvalidateCacheForIndexAction",
controller: "paymentController"
});
$locationProvider.html5Mode(true).hashPrefix('');
});
あなたは、私はユーザーとして表示するあらゆる事前にデータを持っていないMakePayment/SearchPaymentビューを表示するには、MVCのアクションメソッドを呼び出しています上記のコードから把握することができます
それらのビューにデータを入力する必要があります。ただし、EditPaymentビューには、以前に行われた支払いのデータが含まれます。私のルーティングコードは単に値なしでEditPaymentビューをプルするだけです。私は、そのビューに既存のデータを表示する正しい方法が何であるか分かりません。
マイEditPayment.cshtmコードは以下の通りです:また
app.controller("paymentController", function ($scope, $rootScope, $routeParams, paymentService) {
$scope.paymentId;
$scope.billerId;
$scope.billAccount;
$scope.paymentAmount;
$scope.feeAmount=1.0;
$scope.platform = 1;
$scope.confCode;
$scope.makePayment = function() {
var payment = {
BillerId: $scope.billerId,
BillAccount: $scope.billAccount,
PayAmt: $scope.paymentAmount,
FeeAmt: $scope.feeAmount,
Platform: $scope.platform,
};
paymentService.makePayment(payment).then(function (response) {
$scope.confCode = response.data.ConfCode;
});
};
$scope.searchPayment = function() {
var searchPay = {
BillerId: $scope.billerId,
BillAccount: $scope.billAccount
};
paymentService.searchPayment(searchPay).then(function (response) {
$scope.payments = response.data;
});
};
});
、私が追加/更新/編集/削除のために同じコントローラを使用しています:
<h2>Edit Payment</h2>
<div ng-controller="paymentController" class="row">
<div class="col-md-8">
<section id="paymentForm">
<form class="form-horizontal">
@Html.AntiForgeryToken()
<h4>Edit payment</h4>
<hr />
<span class="text-danger" ng-show="false">Validation error summary</span>
<div ng-show="confCode">
<label style="background-color:darkseagreen;">Payment has been made successfully. Confirmation code: {{confCode}}</label>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Payment Id</label>
<div class="col-md-10">
<input type="number" class="form-control" ng-model="paymentId" readonly />
<span class="text-danger" ng-show="false">Payment Id required</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Biller Id</label>
<div class="col-md-10" name="BillerId" id="BillerId">
<select class="form-control" ng-model="billerId" ng-init="billerId='0'">
<option disabled hidden value="0">Select biller</option>
<option value="1">Idea</option>
<option value="2">Airtel</option>
<option value="3">Vodafone</option>
<option value="4">Jio</option>
</select>
<span class="text-danger" ng-show="false">Biller Id required</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Bill Account</label>
<div class="col-md-10">
<input type="text" class="form-control" ng-model="billAccount" />
<span class="text-danger" ng-show="false">Bill account required</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Payment amount</label>
<div class="col-md-10">
<input type="number" class="form-control" ng-model="paymentAmount" />
<span class="text-danger" ng-show="false">Payment amount required</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Fee amount</label>
<div class="col-md-10">
<input type="number" class="form-control" ng-model="feeAmount" value="1.0" readonly />
<span class="text-danger" ng-show="false">Fee amount required</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Platform</label>
<div class="col-md-10">
<input type="text" class="form-control" ng-model="platform" value="1.0" readonly />
<span class="text-danger" ng-show="false">Platform required</span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Pay" class="btn btn-default" ng-click="makePayment()" />
</div>
</div>
</form>
</section>
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
私paymentController.jsは次のようになります。それは正しいアプローチですか?
あなたの熟練したソリューションに感謝します!もうちょっと質問がありました。あなたがそれに答えることができれば非常に役に立ちます。AngularJSを使用していない場合は、サーバーへの呼び出しは1回だけですが(MVCアクションメソッド呼び出し)、AngularJSでは2つの呼び出しがあります。最初は空のビューを取得し、2番目の呼び出しはデータを取得します。パフォーマンスに悪影響を及ぼすことはありませんか? –
コメントが大きすぎるかもしれませんが、SPAのコンセプトを考慮する必要があります(https://en.wikipedia.org/wiki/Single-page_applicationを見てください)。これは私たちがユーザーにウェブアプリを代表するものです。このアプローチの反対は、すべてのWebページがSPAの前に常に行われていたため、サーバーによってレンダリングされるということです。どちらの方法も完全に有効なオプションです。それぞれの原則に基づいてニーズに合ったものを分析するだけで済みます。 – lealceldeiro
簡単に言えば、SPAを使用すると、Webアプリケーションを一度レンダリングし、必要に応じてすべてのパーシャルビューをロードします。これは、バックエンドサービスへの多くのasyn呼び出しを生成しますが、htmlは一度だけレンダリングされます。 SPAを使用しない場合、サーバーはデータのあるページを返さなければなりません。これはjsonを取得し、ビュー(html)にデータを印刷するよりも遅くなる可能性があります。前にも述べたように、あなたは何が必要なのかを注意深く評価しなければなりません(そして、時には簡単ではないことが分かります)。私はインターネットで検索し、読んで、常にベストプラクティスを心得ています。今では多くのオプションがあります。 – lealceldeiro