2013-09-26 44 views
1

好的,這是一個複雜的問題,我可能會要求一個不好的方法。如果是這樣的話,請讓我知道。如何通過AngularJS指令在另一個視圖中更改信息?

因此,我有一個導航欄directive。當有人點擊某些東西時,我設法得到指令來添加一個類並因此加載該欄。 Thanks to StackOverflow

但現在,我有一個獲取和設置值的服務。當服務中的值發生變化時,我想在視圖中反映這一點。這樣的事情可能嗎?

編輯 澄清,如果我確實使用$apply(function()....,我該怎麼做?我的觀點有類似的。我的觀點並不侷限於任何特定的控制器或範圍。不知道是否應該。但這裏是我的觀點的一個片段:

<p> 
     Are you sure you change that song, 
     <br /> 
    {{ songs[0].title }} 
    </p> 

這裏是我的指令:

angular.module('MyApp') 
    .directive('navbar', function() { 
    return { 
     restrict: 'A', 
     templateUrl : '/views/partials/nav.html', 
     controller: function ($scope, ModalService) { 
     $scope.ms = ModalService; 
     $scope.songs = {}; 

     $scope.$watch('ms.songs', function(newVal, oldVal) { 
      if(newVal != null) { 
      $scope.$apply(function() { 
       $scope.songs = newVal; 
      }); 
      } 
     }); 
      }, 
+0

如果變量綁定到控制器,你不能$注意從那裏的變化? – trysis

+0

我幾乎是積極的,你不能像你想要做的那樣在服務中看到值。雖然如果它能夠工作,那麼您將需要第三個參數用於$ watch功能,這對於深層觀察來說是「真實的」。 – Sharondio

回答

1

你試過嗎?

angular.module('MyApp') 
    .directive('navbar', function() { 
    return { 
     restrict: 'A', 
     templateUrl : '/views/partials/nav.html', 
     controller: function ($scope, ModalService) { 
     $scope.songs = ModalService.songs; 
     } 
    }); 
0

,我一個指令和解決方案中必須設置一個服務性質的手錶我沒碰上一個場景最近是設置類似於以下鏈接功能的手錶:

link: function(scope, element, attrs) { 
    // other link code 
    scope.$watch(function() { return svc.property; }, function(data) { 
     // do something here 
    }); 
    // other link code 
} 
相關問題