在从HTML代码调用的JavaScript函数中使用$ scope变量 - AngularJS

时间:2013-01-09 14:34:25

标签: javascript html function scope angularjs

我正在使用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。我还没有找到一种方法来注射它。 问题是我必须用这种方式调用函数。你对此有什么解决方案吗?我很感激!

谢谢!

4 个答案:

答案 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

如果它能解决您的问题,请将其标记为答案。