为什么我不能在ng-click调用(AngularJS)上使用jQuery语句?

时间:2015-05-13 13:39:49

标签: javascript jquery angularjs

试图理解为什么我在尝试使用jQuery函数构建对方法的ng-click调用时获得undefined。 以下是其中一个例子:

<a href="#" class="btn btn-default" ng-click="angularMethod($('input[name=__RequestVerificationToken]').val())">...</a>
我在ng-controller上的

$scope.angularMethod = function(token) {
    $log.debug(token);
}

在控制台上呈现undefined消息。

我在角度js文件之前加载了一个完整的jQuery js文件。 这不应该有用吗?

2 个答案:

答案 0 :(得分:2)

  

我在角度js文件之前加载了一个完整的jQuery js文件。这应该不起作用吗?

不,ngClick和类似指令不是onclick等属性。它只是一些自定义属性,带有一些字符串值,由Angular解析和评估(如果您感兴趣,请参阅parse.js)。您可以提供的那些表达式在当前范围对象的上下文中进行评估。

所以现在你应该能够理解为什么它不适用于你的情况。你有名为$的范围属性,它基本上指向jQuery?我猜不会。从技术上讲,它可以使你的例子工作,但你不应该像这样混合jQuery和Angular。它只会使您的代码极难阅读和支持。

还要检查这个关于正确使用jQuery在Angular中工作的好问题“Thinking in AngularJS” if I have a jQuery background?

答案 1 :(得分:0)

检查这个小提琴我准备好你展示你可以使用angularjs的不同解决方案:

http://jsfiddle.net/joshdmiller/HB7LU/

<div ng-controller="MyCtrl">
<input name="__RequestVerificationToken" ng-model="myvalue">
<a href="#" class="btn btn-default" ng-click="angularMethod(); angularMethodTWO()" ng-model="myvalue">CLICK</a>
</div>




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

function MyCtrl($scope) {
$scope.name = 'Superhero';

$scope.angularMethod = function () {
    alert("WITH NG-MODEL:" + $scope.myvalue);
}

$scope.angularMethodTWO = function () {
    alert("WITH ANGULAR ELEMENT:" + angular.element(document.querySelectorAll("[name=\'__RequestVerificationToken\']")).val());
}
}

希望它能帮助!!

编辑使用较新版本更改了jsfiddle网址(另一个版本不正确)