【问题标题】:alternative to button ng-click in angularjs替代angularjs中的按钮ng-click
【发布时间】:2017-07-25 04:19:18
【问题描述】:

我正在开发 angularjs 应用程序。我的主页上有一个按钮,当用户单击该按钮时,它必须点击控制器并从后端获取数据并显示在浏览器上。在 chrome 和 firefox 中一切正常,但在 IE 中无法正常工作。努力寻找替代解决方案来解决,但没有运气,任何建议都会有所帮助。

html: 登录

spring controller:

@RequestMapping(value = "/getData", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody
    List<String> getMyData(HttpServletRequest request) throws Exception {
        System.out.println("In MyDataController"); //printed only when navigated through chrome
    //logic here
    //return statement
}

PS:当在 IE11 中执行相同的上述代码时,它没有碰到 spring 控制器,但在 chrome 和 safari 上工作正常。有什么替代方法可以实现与 angularjs 中的按钮相同的功能,并且在 IE 和 chrome 中都可以使用。

--已编辑-- js 控制器:

 myApp.controller('myController', function ($scope, MyService) {
    $scope.btnAdminDetails= function () {
    alert("In btnAdminDetails, js controller"); //this is called both in IE11 and chrome
    console.log("In controller");
    MyService.retrieveData().then(
    function (response) {
        alert("response back from spring controller");
        if(window.navigator.msSaveOrOpenBlob){
        $scope.IEBrowser = true;
        $scope.myData = response;
        } else {
        $scope.IEBrowser = false;
         $scope.myData = response;
        }
    },
    function (errResponse) {
        $rootScope.showError("Internal error" + errResponse);
    });
    }
    $scope.btnAdminDetails();
    });
    //service code
    _myService.retrieveData= function(){
    alert("service call");//called when tested from both IE and chrome, but issue is from IE the java controller is not getting called from here..
    console.log("In Angular Service above $q.defer ");               
    var deferred = $q.defer();
    console.log("In Angular Service below $q.defer");
    var randomh=Math.random();
    var repUrl = myAppURL+'/myControllerr/getData.form?x='+randomh+"";
    $http.get(repUrl).then(
    function (response) {
        deferred.resolve(response.data);
    },
    function(errResponse){
        deferred.reject(errResponse);
    }
    );
    return deferred.promise;
    }
I have added Math.random to the request URL in the service call. 

在 IE11 中,当我点击按钮时,只显示控制器中的警报btnAdminDetail, js controller,其他警报语句或 console.log 语句不会打印。

【问题讨论】:

  • 你能告诉我点击按钮,btnAdminDetails 函数正在运行吗?还是不行?
  • 是的,它正在运行并调用角度控制器,问题是它没有击中弹簧控制器。
  • 请向我们展示您的 MyService 代码。
  • 请使用IE开发者工具检查控制台是否有错误记录。
  • @WasifKhan - 请看我上面的帖子,我添加了更多细节和服务电话。 IE 控制台中没有显示错误。但我注意到的一件事是,当在 IE 中打开开发人员工具时,行为是正确的,并且它也在命中 spring 控制器。

标签: javascript java angularjs spring internet-explorer-11


【解决方案1】:

在按钮标签内添加值

<div ng-controller="myController">
    <button type="submit" class="btn btn-default" value="login" ng-
     click="btnAdminDetails()">
       Login
    </button>
</div>

【讨论】:

  • 我已经尝试添加,但没有运气。我现在正在用我最新试用的版本编辑我的帖子。请看一下
  • 你用的是什么IE版本
  • IE11 是版本,控制台中没有显示错误。 @Vikash Kumar
【解决方案2】:

我认为您的应用程序无法在 IE11 中运行。所以请执行以下更改。

1.在head标签中加入下面一行

<meta http-equiv="X-UA-Compatible" content="IE=11" />

2.为您的控制器使用严格模式

    (function () {
    "use strict";

    function yourController($scope, $rootScope ) {
        // Do things
    }

}());

3.针对IE11修改web.config文件

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=11" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration> 

【讨论】:

    【解决方案3】:

    ngClick 没有这样的替代品,但您也可以使用 ngDblClick 代替 ngClick 了解更多详细信息,请参阅此链接:

    https://docs.angularjs.org/api/ng/directive/ngClick

    【讨论】:

    • 我的问题不是替代方案,但应该在 IE 中工作,显然我不能使用 ngDblClick,因为我不能告诉用户双击以获得功能而不是单击按钮。对我以上相关帖子的任何建议都会有所帮助。@Mayank Sharma
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2016-10-28
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多