0

タイトルが最も正確でない場合は申し訳ありません..だから、私がやろうとしていることと、その背後にある理由は何ですか. 最大 400 アイテムまで、非常に巨大なエントリのリストがあります。このリストを ajax リクエストから取得します。最初のアイテムに属性がある場合はrunning、( を使用して) リストから抽出splice()し、ディレクティブに渡します。 、分離されたスコープで作業できます。なんで?実行中のエントリにはタイマーがあり、毎秒その属性の 1 つに +1 が追加されるため$timeoutです。

このAngular.jsフィルターとスコープ上の関数が毎秒変化しているため、分離したいのですが、フィルターと実行されていないエントリのリストにあるすべてのものを毎秒呼び出す必要はありません。 ) 実行中のエントリで変更されました。

保存などを押すと、実行中のエントリをエントリに戻したいのですが、running: false今だけです。

親からオブジェクトを継承し、ディレクティブでそこから分離されたスコープを作成する方法を知っています- http://plnkr.co/edit/zq3urVh5t6N12T5ZrViO?p=preview

この方法でそこに渡すのは理想的ではないように思えますが、それは問題なく、ベストプラクティスに反するものではないと言われました。

ここに問題/質問があります

  1. ディレクティブをスコープに追加せずに「実行中」に渡す方法はありますか?コピーされるとほとんど役に立たないからです
    • スコープに追加せずに渡す方法を探す必要がありますか?
    • またはコピー後に削除する必要がありますか?
    • それとも関係ないからやめた方がいいですか?
  2. ajaxで設定されている場合ENTRIES、まだ設定されていないため、実行中のものをコピーすることはできません - http://plnkr.co/edit/vH3hKbkTkTvcHqykIXDt?p=preview
    • $watchディレクティブの中に入れるべきですか?
    • または、ブロードキャスト/オンを使用する必要がありますか? このようにhttp://plnkr.co/edit/1oPMyxSVMdiN8tB9l1YJ?p=preview
    • または私はそれを完全に間違っていますか?

ありがとう!

4

2 に答える 2

0

完全なリテラル オブジェクトを渡したい場合は '=' を使用する必要がありますが、@ を使用したい場合は $eval を使用する必要があります。

<!doctype html>
<html ng-app="plunker" >
<head>
  <meta charset="utf-8">
  <title>AngularJS Plunker</title>

  <link rel="stylesheet" href="style.css">
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
  <script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
    <input ng-model="obj.name">

    <my-directive obj="obj" title="{{title}}">

      </my-directive>
    <script type="text/javascript">
        var app = angular.module('plunker', []);

        app.controller('MainCtrl', function ($scope) {
            $scope.obj = { name: "John", surname: "Doe" };
            $scope.title = { name: 'abc' };
        });


         app.directive('myDirective', function () {
        return {
            restrict: 'E',
            template: "<div><span>{{obj.name}}<span><span>{{title}}<span></div>",
            replace: true,
            scope: { title: '@', obj: '=' },
            link: function (scope, element, attrs) {
                attrs.$observe('title', function (value) {
                    alert(scope.$eval(value).name);
                })


            }
        }
    })
    </script>
</body>
</html>
于 2013-04-13T09:53:17.220 に答える