2014-12-08 60 views
1

我想從子控制器訪問/修改父控制器中的某些變量。這個變量是一個promise(一些$ http請求),所以當我在子控制器中渲染元素時,這個變量仍然不存在。角父母和子控制器通信

我意識到使用ng-if可以幫我解決這個問題。但是2範圍不能通信。我的問題是:

  1. 我怎麼雙向綁定變量2範圍是什麼?這是做到這一點的正確方法嗎? ..
  2. 有沒有辦法,我不需要使用這個ng-if?我有2-3個承諾等待的變量,我不想在元素中使用多個ng-if語句。這可能嗎?

http://jsbin.com/rahidukuvi/1/edit

回答

1

最簡單的方法是使用$範圍。$表在孩子控制器等待父控制器基於Ajax回調的任何變量值的變化。在$ scope中。$ watch回調在子控制器中,您可以根據需要更改變量值。

1

你會使用brodcast讓子控制器知道值已更改。然後,您會在兒童控制器中聽取並做必要的事情。請參閱下面的示例代碼

.controller('MyController', 
    function($scope, $interpolate, $timeout) { 

     //$scope.sssss = {}; 

     $scope.$watch('sssss.a', function() { 
      $scope.$broadcast('valueChanged', $scope.sssss) 
     }); 

     $timeout(function() { 
      $scope.sssss = { 
       a: '12345' 
      }; 
     }, 2000); 



    }) 
.controller('MyChildController', 
    function($scope, $interpolate, $timeout) { 
     $scope.$on('valueChanged', function(event, value) { 
      $scope.ttttt = value.a + '123'; 
     }); 


    }); 
+0

是使用$ watch的唯一方法嗎?我爲什麼要這樣做的原因是我將多個承諾傳遞給子控制器,如果我有多個$ watch,這將會非常複雜.... – 2014-12-09 06:25:44

+0

但是,如果您只是在父控制器上創建監視器,然後廣播改變所有關心它的兒童管制員?除非我誤解了 – user1325394 2014-12-10 05:35:46

2

最佳做法是創建一個可以在控制器之間共享的服務(使用單例模式)。