2016-06-01 3 views
0

я определяю директиву в угловом 1.4, которая принимает параметр Scope «Ъ»:Как смотреть данные контроллера асинхронных в угловой директиве

(function() { 
    'use strict'; 
    angular 
     .module('m') 
     .directive('mydirective', mydirective); 

    /** @ngInject */ 
    function mydirective() { 
     var directive = { 
      restrict: 'E', 
      templateUrl: 'app/components/mydirective/mydirective.html', 
      scope: { 
       b: '=' 
      }, 
      controller: MydirectiveController, 
      controllerAs: 'vm', 
      bindToController: true 
     }; 
     return directive; 

    /** @ngInject */ 
    function MydirectiveController($scope, $state) { 
     var vm = this; 
     //here How to watch the parameter b to refresh the directive html result? 
    } 

в HTML странице:

<mydirective b="ctrl.b"></myupl> 

в бизнесе контроллер, б получается из углового ресурса

PayService.getBusinessNumber().then(function(results){ 
    vm.b = {business_id: results.no}; 
}); 

в index.route.js, которые определяют маршрут и бизн контроллер ESS,

$stateProvider 
    .state('payShowInfo', { 
     url: '/payShowInfo', 
     templateUrl: 'app/pay_show_info.html', 
     controller: 'PayShowController', 
     controllerAs: 'ctrl' 
    }); 

моя проблема, когда директива загружен, параметр «б» не определено, как смотреть данные контроллера асинхронных в угловом директиве? а затем использовать новое значение «b» для обновления страницы html?

+0

Вы уже связать 'b' к контроллеру, так что вы можете сделать в шаблоне:' '

{{ ctrl.b }}
devqon

ответ

0

Если вы определяете параметр директивы как «=», вы имеете в виду, что у вас будет двусторонняя привязка данных. Поэтому, если вы измените значение в контроллере, у вас будет изменение, отраженное в представлении.

angular.module('nib', []) 
    .directive('mydirective', function ($timeout) { 
     return { 
      restrict: 'E', 
      scope: { 
       b: '=' 
      }, 
      link: function ($scope, element, attrs) { 

      }, 
      template: '<div>Test: {{b}}</div>' 
     }; 
    }) 
    .controller('ctrl',function($scope){ 

     $scope.click = function(){ // emulating asynchronous request 
     $scope.test = 'testing'; 
     } 

    }) 

Смотрите в следующей plnkr:

http://plnkr.co/3qs1NpU1aIhKzxyCMXjh?p=preview

Смежные вопросы