Javascript 如何使用webmethod在angular中单击输入按钮时保持绑定

Javascript 如何使用webmethod在angular中单击输入按钮时保持绑定,javascript,jquery,angularjs,webmethod,Javascript,Jquery,Angularjs,Webmethod,我正在尝试使用已知的工作webmethod(.net)更新我的角度模型 我成功地从登录到控制台的webmethod获取数据 它也会更新输入框的值 但这不会更新我的角度模型绑定。 我做错了什么 HTML 代码隐藏 [WebMethod] [ScriptMethod(UseHttpGet = true)] public static string GetCallData() { String Calls = "34"; retu

我正在尝试使用已知的工作webmethod(.net)更新我的角度模型

  • 我成功地从登录到控制台的webmethod获取数据

  • 它也会更新输入框的值

  • 但这不会更新我的角度模型绑定。

我做错了什么

HTML

代码隐藏

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public static string GetCallData()
    {
         String Calls = "34";
         return Calls;
    }
Ajax调用

$(document).ready(function () {
            $('.btn-primary').click(function () {
                $.ajax({
                    type: "GET",
                    url: "Stats.aspx/GetCallData",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        $('.txtCalls').text(response.d);
                        console.log(response.d);
                    },

                    failure: function (response) {
                        alert(response.d);
                        console.log(response.d);
                    }
                });
             });

这是因为这是一个JQUERY/Ajax调用,而不是角度调用。您需要从角度控制器进行调用,并使用
$http.get
而不是
$.ajax

您的按钮
.btn primary
应该添加
ng click=“somethod()”
而不是
JQuery on('click')
。比如:

<input class="btn-primary" ng-click="someMethod() />
此外,angular是一个MVVM框架,作为此模式的一部分,您可以更新模型(数据),而不是视图
html>form>input
控件。双向绑定将为您完成其余工作。

如果您从“外部”angular更改值,则需要对angular
范围的引用,然后调用
范围。$apply()

例如:

var el = $('.txtCalls').get(0);
angular.element(el).scope().$apply();

但是,如果可能的话,通常最好使用angularJS提供的代码/过程(如
$http.get

在angularJS控制器或服务或指令中使用angularJS$http.post,而不是$.ajax。

这是一个get调用,而不是post btw,在y post中也有解释,然后使用$http.get!!angular.js文档中的所有内容:这是一个令人鼓舞的糟糕做法。BTW[ScriptMethod(UseHttpGet=true]缺少右括号)
<input class="btn-primary" ng-click="someMethod() />
$scope.someMethod = function(){  $http.get(...) };  
var el = $('.txtCalls').get(0);
angular.element(el).scope().$apply();