2015-05-25 4 views
2

Я довольно новый с угловым и я прочитал много потоков здесь и искал эту тему, но я не могу получить четкий ответ. То, что я пытаюсь сделать, это передать значение, которое не установлено до тех пор, пока пользователь не сделает выбор, и в этот момент мой контроллер сделает асинхронный вызов и назначит результат значению в контроллере. Контроллер моей директивы должен получить доступ к этому значению для выполнения своей логики.AngularJS Передача изменяющихся значений от контроллера к контроллеру директивы

Вот такой код, который у меня есть.

app.controller('testCtrl', function($scope){ 
    $scope.getData = function(){ 
     //getDataFunc is a method in a Factory, which is not shown here 
     $scope.results = getDataFunc(); 
    } 
} 

app.directive('testDir', function(){ 
    return{ 
     restrict: 'AE', 
     scope: { 
      resultData: '=' 
     }, 
     controller:['$scope', function($scope){ 
      //I need to be able to access the $scope.results from the parent controller 

     } 
    } 
} 

Любая помощь будет принята с благодарностью.

+0

Итак, вам нужно запустить код контроллера только по директиве, только если 'resultData' представляет? –

+0

Ну, вы всегда можете использовать '$ rootScope' для доступа к переменной или функции. Возможно, вам стоит взглянуть на лучшее понимание http://stackoverflow.com/a/21737230/4194436 – Michelangelo

ответ

0

Вы близки:

Ваша разметка должна выглядеть примерно так:

<div ng-controller="testCtrl"> 
    <test-dir result-data="results"></test-dir> 
</div> 

app.controller('testCtrl', function($scope){ 
    $scope.getData = function(){ 
     //getDataFunc is a method in a Factory, which is not shown here 
     $scope.results = getDataFunc(); 
    } 
} 

app.directive('testDir', function(){ 
    return{ 
     restrict: 'AE', 
     scope: { 
      resultData: '=' 
     }, 
     controller:['$scope', function($scope){ 
      //I need to be able to access the $scope.results from the parent controller 
      //$scope.resultData will always reflect the value of results here 
      $scope.$watch('resultData', function(){ 
       //called any time $scope.resultData changes 
      }); 
     } 
    } 
} 

Вы на самом деле не нужны два способа связывания, так это то, как я на самом деле сделать это:

app.directive('testDir', function(){ 
    return{ 
     restrict: 'AE', 
     scope: { 
      resultData: '&' 
     }, 
     controller:['$scope', function($scope){ 
      //I need to be able to access the $scope.results from the parent controller 
      //calling $scope.resultData() will always return the current value of the parent $scope.results 

      $scope.$watch('resultData()', function(){ 
       //called any time $scope.resultData() changes 
      }); 
     } 
    } 
} 
+0

Спасибо за помощь! – TotallyLost

0

Создайте сервис со значением и задайте/получите методы для хранения результатов getDataFunc(), а затем добавьте эту службу в директиву, чтобы получить доступ к значению.