我想知道一旦页面根据查询字符串值加载,是否有办法在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' [删除所有堆栈跟踪后]
答案 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
};