1

私はAngularを使用しており、JavaScript関数で使用するために$scopeを取得しようとしています。次に例を示します。

私は次のような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

4 に答える 4

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 および scope.$apply のドキュメント: http://docs.angularjs.org/api/ng .$rootScope を必ず 読みください。スコープ#$適用

しかし、あなたのユースケースは何ですか?もっと良い方法があるかもしれません。

于 2013-01-09T15:12:59.900 に答える
1

インラインで行うこともできます:

JS:

$scope.doThis = function(str){
     alert(str);
     $scope.$apply();
}

HTML:

<button onclick="angular.element(this).scope().doThis('TEST');"></button>

警告 - スコープのネストは結果に影響を与える可能性がありますが、Angular コードが親コントロールにある場合、これはそのままで問題なく動作します

于 2015-07-16T12:30:51.703 に答える
0

これに対して angular ng-click を呼び出してから、そこからスコープを渡す必要があります。

これが私があなたのために作成した例です。http://plnkr.co/edit/UDLJYuZhR4yfiocSPjKJ

問題が解決した場合は、回答としてマークしてください。

于 2013-01-09T19:00:03.293 に答える
0

これは @Andy の回答と同じですが、次の代わりにイベントから $scope を取得する方法を見たい場合に備えて言及しますthis

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
}
于 2013-01-09T18:08:01.867 に答える