2015-04-29 3 views
2

У меня есть директива, которая принимает значение атрибута из HTTP-вызова, как так:Угловая передача динамический размах директиве

контроллер

app.controller("HomeController", function($scope){ 
    $http.get("/api/source").then(function(res){ 
    $scope.info = res.data 
    }); 
}); 

HTML

<div ng-controller="MainController"> 
    <ng-mydirective data-info="{{info}}"></ng-mydirective> 
</div> 

Директива:

app.directive("ngMydirective", function(){ 
    return { 
    restrict: "E", 
    templateUrl: "/partials/info.html", 
    link: function(scope, element, attrs){ 
     scope.info = attrs.info; 
    } 
    } 
}); 

Я tr ying передать эту информационную переменную из контроллера в директиву через атрибут. Это не работает, потому что значение переменной изначально создается из асинхронного HTTP-вызова, поэтому в момент создания директивы нет значения.

Есть ли способ сделать это?

+0

Проверьте, как пройти параметры для директивы: http://stackoverflow.com/questions/18557693/how-to-pass-directive-parameters-to-directive – manzapanza

ответ

2

Вы можете наблюдать значение атрибута:

link: function(scope, element, attrs){ 
     attrs.$observe('info', function(val) { 
     scope.info = val; 
     }) 
} 

Кроме того, если вы можете изменить область директивы должны быть изолированы, вы можете сделать это путем связывания значений:

app.directive("ngMydirective", function(){ 
    return { 
    restrict: "E", 
    scope: {info: '='}, 
    templateUrl: "/partials/info.html", 
    link: function(scope, element, attrs){ 

    } 
    } 
}); 

<div ng-controller="MainController"> 
    <ng-mydirective info="info"></ng-mydirective> 
</div> 
Смежные вопросы