AngularJSとIML

画像

免責事項 :比較は「ホリバー」を上げることを意味するのではなく、あるツールが別のツールと比較して解決するタスクの概要を示します。 私は、angularJのすべての複雑さに精通しているわけではありませんが、このツールに関する10の記事を読んだ後、IMLで同じ問題を解決する別の例を示します。


何を比較しますか?




asp.net mvcのフレームワーク内では、変数、定数、およびローカリゼーションサポートには利点がないため、意味のある機能を選択しました。
注:以下では、asp.net mvcのフレームワーク内で開発が行われることがしばしば考慮されます。

どのように比較しますか?


この手法は非常に単純です。AngularJS(ViewおよびJs)およびIML(Viewのみ)オプションを引用し、さらにIMLの方が優れている理由を説明します。 私は長所だけを強調しますが、コメントでIMLのマイナス面を見て喜んでいるので、すべてのコメントを作成できます。

コントローラー

角度JSビュー

<div ng-controller="angularController"> <button ng-click="sayHello()">Say</button> </div> 

角度js

 app.controller('angualrController', function ($scope) { $scope.sayHello = function(){ alert('Hello') } }); 

IML

 @(Html.When(JqueryBind.Click) .Do() .Direct() .OnSuccess(dsl => dsl.Utilities.Window.Alert("Hello")) .AsHtmlAttributes() .ToButton("Say")) 


より良い:



サーバーへのアクセス

サーバーコード

 public ActionResult Get(GetProductByCodeQuery query) { List vms = dispatcher.Query(query); return IncJson(vms); // for AngularJs need use Json with AllowGet } 

注:サーバー側は、AngularJSとIMLの両方で同じです
角度html

 <div ng-conroller="productController"> @Html.TextBoxFor(r => r.Code) <label>{{model.Name}}</label> <button>Get name</button> </div> 

角度js

 kitchen.controller('productController', function ($scope, $http) { $scope.get = function(){ $http.get({ url:'product/get', params:{Code:$('[Name="Code"]').val()} }) .success(function(data) { $scope.Name = data.Name }); } }); 

IML

 @{ var labelId = Guid.NewGuid().ToString(); } @Html.TextBoxFor(r=>r.Code) @(Html.When(JqueryBind.Click) .Do() .AjaxGet(Url.Action("Product","Get",new { Code = Html.Selector().Name(r=>r.Code) }) .OnSuccess(dsl => dsl.WithId(labelId).Core().Insert.For(r=>r.Name).Text()) .AsHtmlAttributes() .ToButton("Get name")) 

注:URLを構築するとき、ルートとして匿名オブジェクトだけでなく、Url.Actionの型付きバージョン(「Product」、「Get」、new GetProductQuery(){Code = Html.Selector()。Name(r => r.Code)})

より良い:


Incoding Frameworkでは、MVDをURLとして使用すると、追加のコントローラーとアクションを記述せずに実行できます
 Url.Dispatcher().Query(new GetProductQuery() {Code = Html.Selector().Name(r=>r.Code)}).AsJson() 


プッシュデータ

サーバーコード

 public ActionResult Add(AddCommand input) { dispatcher.Push(input); return IncJson(); // for AngularJS need use Json() } 

注:サーバー側は、AngularJSとIMLの両方で同じです

角度表示

 <div ng-controller="productController"> @Html.TextBoxFor(r => r.Name) @Html.CheckboxFor(r => r.IsGood) <button ng-click="add"> Add </button> </div> 

角度js

 kitchen.controller('productController', function ($scope, $http) { $scope.add = function(){ $http({ url: 'product/Add', method: "POST", data: { Name : $('[name="Name"]').val(), IsGood : $('name="IsGood"]').is(':checked') } }) .success(function(data) { alert('success') }); }); 

IML

 @Html.TextBoxFor(r=>r.Name) @Html.CheckboxFor(r=>r.IsGood) @(Html.When(JqueryBind.Click) .Do() .AjaxPost(Url.Action("Product","Add",new { Name = Html.Selector().Name(r=>r.Name), IsGood = Html.Selector().Name(r=>r.IsGood) })) .OnSuccess(dsl => dsl.Utilities.Window.Alert("Success")) .AsHtmlAttributes() .ToButton("Add")) 


より良い:



フォームを送信

角度表示

 <div ng-controller="productController"> <form name="AddForm"> @Html.TextBoxFor(r => r.Name) @Html.CheckboxFor(r => r.IsGood) <input type="submit" value="save" ng-submit="submit" /> </form> </div> 

角度js

 controller('productController', function ($scope, $http) { $scope.submit = function(){ $http({ url: 'product/Add', method: "POST", data: angular.toJson($scope.addForm) }).success(function(data) { alert('success') }); }); 

IML

 @using(Html.When(JqueryBind.Submit) .DoWithPreventDefault() .Submit() .OnSuccess(dsl => dsl.Utilities.Window.Alert("Success")) .AsHtmlAttributes() .ToBeginForm(Url.Action("Product","Add"))) { @Html.TextBoxFor(r=>r.Name) @Html.CheckboxFor(r=>r.IsGood) <input type="submit" value="add"> } 

より良い:


テンプレート


サーバーコード

 public ActionResult Fetch() { var vms = new List() { new PersonVm(){ Last= "Vasy", First = "Smith", Middle = "Junior"}, new PersonVm(){ Last= "Vlad", First = "Smith", Middle = "Mr"}, }; return IncJson(vms); // for angular need use Json with AllowGet } 

注:サーバー側は、AngularJSとIMLの両方で同じです
角度テンプレート

 <script id="person.html" type="text/ng-template"> {{person.last}}, {{person.first}} {{person.middle}} </script> 

角度表示

 <div ng-controller="productAddForm"> <div ng-repear="person in persons" ng-template="person.html"> </div> </div> 

角度js

 app.controller('personController', function ($scope,$http) { $scope.refresh= function(){ $http.get('person/fetch', function(data){ $scope.Persons= data }); } }); 

IMLテンプレート

 @{ var tmplId = Guid.NewGuid().ToString(); using (var template = Html.Incoding().Template(tmplId)) { using (var each = template.ForEach()) { @each.For(r=>r.First),@each.For(r=>r.Middle),@each.For(r=>r.Last) } } } 

IMLビュー

 @(Html.When(JqueryBind.InitIncoding) .Do() .AjaxGet(Url.Action("Personal","Fetch")) .OnSuccess(dsl => dsl.Self().Core().Insert.WithTemplate(tmplId.ToId()).Html()) .AsHtmlAttributes() .ToDiv()) 

より良い:




一般的な利点は何ですか:



結論 :AngularJsはmvcアーキテクチャをクライアントにデプロイします。これにより、一方でコードを構造化できますが、サポートの問題も追加されます。 開発者asp.net mvcにはmvcのサーバー側の実装があり、より強力で適切な言語を使用して、複雑さを回避できます。

Source: https://habr.com/ru/post/J214293/


All Articles