在angularjs中加载页面后自动单击按钮

时间:2014-10-21 19:41:38

标签: javascript html5 angularjs button click

我想知道一旦页面根据查询字符串值加载,是否有办法在angularjs页面上自动执行按钮点击。例如,在一个简单的asp.net web表单中,如果url中的查询字符串为true,那么我只需调用Button1_Click(sender,e);来处理页面加载中的click事件。但这个HTML5页面使用angularjs,我似乎无法弄清楚如何做到这一点。任何帮助都将受到高度赞赏。

编辑:也许我的解释不够清楚......我的不好。但是这里......我打算这样做。[因为我不能发布图片了......]

http://host/app/Quik.aspx?Order=5779809

UI:

TxtLookupNum: {{InputValue}}    DdlWMS:{{WMSKey}}    DdlWsNum: {{WorkStationName}}
btnLookup:Submit

角度代码:

$scope.Lookup = function(WMSKey,InputValue,WSNum);

当我的aspx页面有一个查询字符串参数时,我想自动触发click事件并将3个参数传递给我的angular方法,如上所述。

这就是我写它的方式,它起作用但是:

var inputVal = $('#txtLookupNum'); 
if (inputVal.val() != "") {$("#btnLookup").trigger("click");}   

但现在我收到以下错误:

  

TypeError:无法读取未定义的属性'0' [删除所有堆栈跟踪后]

2 个答案:

答案 0 :(得分:4)

一种方法可以是自定义指令。附件代码段中的指令onLoadClicker会在指令呈现时单击定义它的元素 - 在您加载页面的情况下。

ng-click="wasClicked()"仅用于控制它真正被点击,请参阅浏览器控制台。这也是我定义-1优先级的原因,因为ng-click的优先级是0

您只需要提供您的逻辑(在$timeout中包含if())何时执行以及何时不执行(例如基于routeParams)。

注意:$ timeout是让Angular世界意识到点击(将运行摘要周期),没有它Angular不会注意到发生的事情。

var myApp = angular.module('myApp', []);

myApp.controller('myCtrl', ['$scope',
  function($scope) {
    $scope.wasClicked = function() {
      console.log('I was clicked!');
    }
  }
]);

myApp.directive('onLoadClicker', ['$timeout',
  function($timeout) {
    return {
      restrict: 'A',
      priority: -1,
      link: function($scope, iElm, iAttrs, controller) {
        $timeout(function() {
          iElm.triggerHandler('click');
        }, 0);
      }
    };
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <a href="" ng-click="wasClicked()" on-load-clicker>link</a>
</div>

答案 1 :(得分:1)

如果您在onload期间尝试调用函数,请尝试此

var init = function () {
   // check if there is query in url
   // and fire search in case its value is not empty
};
// and fire it after definition
init();


// register controller in html
<div data-ng-controller="myCtrl" data-ng-init="init()"></div>

// in controller
$scope.init = function () {
    // check if there is query in url
    // and fire search in case its value is not empty
};