AngularJS Fancybox Всплывающее Окно
Я начал проект angularjs, и я хотел бы реализовать fancybox.
для этого я включил Плагины jQuery и fancybox в решение. Я пытаюсь открыть шаблон в коде, показанном ниже, в окне fancybox.
посмотреть
<a href="" ng-click="openPage('popups/add.html')">ADD</a>
контроллер
app.controller('MainController',
function MainController($scope) {
$scope.user = "Hey Welcome";
$scope.open = function(template_path){
$.fancybox({"href":template_path})
}
}
)
и всплывающее окно/добавить.HTML-код
<div class="pop-contnr">
<h2>ADD</h2>
<table>
<thead>
<tr>
<th align=center>{{user}}</th>
</tr>
</thead>
</table>
</div>
Fancybox успешно открывает окно, содержащее шаблон, но {{user}}
выражение не было оценено. Кто-нибудь может помочь?
3 ответов
Я создал директиву для fancybox
app.directive('fancybox',function($compile, $timeout){
return {
link: function($scope, element, attrs) {
element.fancybox({
hideOnOverlayClick:false,
hideOnContentClick:false,
enableEscapeButton:false,
showNavArrows:false,
onComplete: function(){
$timeout(function(){
$compile($("#fancybox-content"))($scope);
$scope.$apply();
$.fancybox.resize();
})
}
});
}
}
});
вот упрощенная версия директивы fancybox, которую мы с моей командой написали, чтобы открыть fancyboxes на основе шаблона одним щелчком мыши.
он вызывается в разметке следующим образом:
<div fancybox ng-click="openFancybox('templateUrl')"> </div>
код директивы:
app.directive('fancybox', function ($compile, $http) {
return {
restrict: 'A',
controller: function($scope) {
$scope.openFancybox = function (url) {
$http.get(url).then(function(response) {
if (response.status == 200) {
var template = angular.element(response.data);
var compiledTemplate = $compile(template);
compiledTemplate($scope);
$.fancybox.open({ content: template, type: 'html' });
}
});
};
}
};
});
Это можно увидеть, работая в этом plunker
я продлила ответ выше использовать кэш шаблонов Angular.
он вызывается в разметке следующим образом:
<div fancybox fancybox-template="template.html">Open Fancybox</div>
код директивы:
app.directive('fancybox', function ($templateRequest, $compile) {
return {
scope: true,
restrict: 'A',
controller: function($scope) {
$scope.openFancybox = function (url) {
$templateRequest(url).then(function(html){
var template = $compile(html)($scope);
$.fancybox.open({ content: template, type: 'html' });
});
};
},
link: function link(scope, elem, attrs) {
elem.bind('click', function() {
var url = attrs.fancyboxTemplate;
scope.openFancybox(url);
});
},
}
});
здесь plunker.