我正在使用Angular,我正试图让$ scope在JavaScript函数中使用它。这是一个例子:
我有一个像这样的html标签:
<a id="doSomething" onclick="javascript: doSomething(this);">Do Something</a>
<div ng-show="flag">Click!</div>
和一个像这样的JavaScript函数:
function doSomething(obj) {
//$scope.flag = true;
return true;
}
我想要的是在这个函数中使用$ scope。我还没有找到一种方法来注射它。 问题是我必须用这种方式调用函数。你对此有什么解决方案吗?我很感激!
谢谢!
答案 0 :(得分:4)
如果你真的需要..这里是如何:
HTML:
<a onclick="doThing(this);">Do it!</a>
JS:
function doThing(el) {
var $scope = angular.element(el).scope();
$scope.thing = newVal;
$scope.$apply(); //tell angular to check dirty bindings again
}
请务必阅读angular.element的文档:http://docs.angularjs.org/api/angular.element 对于范围。$ apply:http://docs.angularjs.org/api/ng。$ rootScope.Scope#$ apply
但是你的用例是什么?可能有更好的方法。
答案 1 :(得分:1)
您也可以内联:
JS:
$scope.doThis = function(str){
alert(str);
$scope.$apply();
}
HTML:
<button onclick="angular.element(this).scope().doThis('TEST');"></button>
警告 - 范围嵌套可能会影响结果,但如果角度代码在父控件中,则此方法可以正常工作
答案 2 :(得分:0)
这与@Andy的答案相同,但我提到它以防人们想要了解如何从事件而不是this
获取$ scope:
HTML:
<a onclick="doThing(event);">Do it!</a>
JS:
function doThing(ev) {
var $scope = angular.element(ev.srcElement).scope();
$scope.flag = true;
$scope.$apply(); //tell angular to check dirty bindings again
}
答案 3 :(得分:0)
你应该为此调用angular ng-click,然后从那里传递范围。
以下是我为您创建的示例。 http://plnkr.co/edit/UDLJYuZhR4yfiocSPjKJ
如果它能解决您的问题,请将其标记为答案。