15

私のコントローラー:

$scope.totals = totals;

私のテンプレート(HTMLインジェクションで期待どおりに動作します):

{{totals}}

totalsしかし、次のように、テンプレート内のスクリプトで変数にアクセスする必要があります。

<script>
  var totals = ????;
  // do stuff with totals
</script>

$scope.totals$totals、などを試しましたが、{{totals}}役に立ちませんでした。洞察をいただければ幸いです、ありがとう!

編集:

以下は、私のコントローラーとテンプレートの jsfiddle です。$scope.totalsテンプレート内に、変数を使用するスクリプトを挿入したいと考えています。

http://jsfiddle.net/38CrC/

4

2 に答える 2

14

まず第一に、AngularJS の背後にある考え方は、そのような状況を回避することです。

AngularJS に関しては、アプリケーションを再考し、ディレクティブを使用して、現在記述しているコードをスクリプト タグにカプセル化する方がよいでしょう。

ただし、そうは言っても、次のようなスコープにアクセスする方法があります。

var $element = $('#elementId');

var scope = angular.element($element).scope();

詳細については、ドキュメントを参照してください。

ただし、前述のとおり、ほとんどの場合、推奨される方法ではありません。

それが役立つことを願っています!


OPがjsFiddleを投稿した後の更新:

http://jsfiddle.net/jvandemo/hYnBa/1/で、便利なように動作する jsFiddle を作成しました。

あなたの例は属性を持つ単純なものdivであるためng-controller、次のようにスコープにアクセスできます。

<script>
    $(document).ready(function(){
        var $element = $('div[ng-controller="AdminEventsCtrl"]');
        var scope = angular.element($element).scope();
        console.dir(scope);
    });
</script>

何が起こるかは次のとおりです。

  • 要素を選択します (この場合は jQuery を使用)
  • 要素を AngularJS 要素としてラップします (要素に追加のメソッドを公開します)
  • scope()要素でメソッドを呼び出します
  • その後、スコープのプロパティにアクセスできます。scope.totals

それが役立つことを願っています!

于 2013-06-22T22:47:49.260 に答える
2

OP 回答:

ディレクティブを使用して、必要な値を見つける必要がありました。使用したい値を設定するコントローラーに、次のようにディレクティブを追加しました。

'use strict';

angular.module('AdminApp')
  .controller('AdminEventsCtrl', function ($scope, collection) {
    $scope.totals = collection;
  }).directive('foo', function(){
    return {
        restrict: 'A',
        link: function(scope, elem, attrs){
            //Use scope.totals here
        }
    }
});

私のテンプレートには、宣言がありました:

<div foo></div>

これにより、変数の合計で必要なことを実行できるようになりました。

この回答にたどり着くのを手伝ってくれた@jvandemoに感謝します。

于 2013-06-23T17:10:33.667 に答える