0

對不起,如果標題不是最準確的.. 所以我想要做什麼以及我背後的原因是什麼。我有一個可以相當大的條目列表,可以達到400個項目,我從ajax請求獲得這個列表,現在如果第一個項目具有屬性running我想從列表中提取它(通過使用splice())並通過它到一個指令,它可以在一個隔離範圍上工作。爲什麼?因爲正在運行的條目上會有一個定時器,它會在每秒鐘的$timeout之間爲其每個屬性+1。將變量從控制器傳遞到指令的隔離範圍而不將其添加到父級的範圍的最佳方法

現在,我想它,因爲這個Angular.js filters and functions on scope that is changing every second我不想不運行條目列表上的過濾器和一切隔離,被稱爲每秒只是因爲東西(定時器特別是)上運行的條目改變。

現在,當我按下保存或其他東西時,我想將運行條目重新輸入條目,現在只能使用running: false

我那種知道如何從繼承父對象,從它的指令創建隔離範圍 - http://plnkr.co/edit/zq3urVh5t6N12T5ZrViO?p=preview

傳遞它有這樣並沒有真正似乎理想,但有人告訴我,這是罰款和沒有什麼比最佳實踐真的好

現在,這裏是問題/問題

  1. 有沒有辦法通過「跑」的指令而不將其添加到的範圍,因爲這幾乎是無用的。有一次它被複制
    • 我應該尋找一種傳遞方式而不將其添加到範圍中嗎?
    • 還是應該在複製後刪除它?
    • 或者我應該離開它,因爲它並不重要?
  2. 如果ENTRIES正在設置與阿賈克斯,這是不可能複製的運行一個,因爲它尚未設置 - http://plnkr.co/edit/vH3hKbkTkTvcHqykIXDt?p=preview

謝謝!

+0

:{條目:「@項目」}詳細的解釋請參見HTTP: //docs.angularjs.org/guide/directive –

+0

@不適用於對象,請參閱http://plnkr.co/edit/evst1hkDcoCvvLb8610X?p=preview,我仍然必須將運行條目添加到範圍能夠將它傳遞給指令 – foxx

+0

其不正確只是使用下面的代碼在html –

回答

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> 
+0

I需要的不僅僅是名字,條目將至少有5個其他屬性,這就是爲什麼我要傳遞它的整個入口對象。 – foxx

+0

我以爲你只是想通過一個屬性完整的字面pls使用=屬性 –

+0

=會設置雙向綁定,不是嗎?對我來說,這又不算什麼,我*不希望*指令的範圍影響到父範圍。理由在我的問題的第二段。 – foxx

0

更改的小例子您指令範圍有:真正的 - 這是那麼孤立的,而是繼承父

app.directive('myDirective', function($timeout) { 
    return { 
    restrict: 'E', 
    scope: true, 
     link: function(scope, element, attrs) { 
      scope.timer = 0; 
      $timeout(function tick() { 
       scope.timer = scope.timer+1; 
       $timeout(tick, 1000); 
      });  
     } 
    } 
}) 

然後在你的指令只是用它,如果它是在父範圍!

<my-directive> 
    <h4>"running" entry on directive in isolated scope</h4> 
    <p>Timer: {{timer}}</p> 
    {{ running | json }}<br/> 
    <input type="text" ng-model="running.name" /> 
</my-directive> 

http://plnkr.co/edit/f5AzfjoEmRT9P1Dw8REj?p=preview

,如果你想通過從控制變量指令,你必須設置的屬性和使用屬性(例如範圍)範圍內
相關問題