Я пытаюсь написать директиву, так что элемент с атрибутом if-login-service="facebook"
будет создан, но элемент с любым другим значением для этого атрибута не будет.
Прогресс, который я сделал с этой директивой до сих пор, показан ниже
app.directive('ifLoginService', function($compile) {
return {
restrict: 'EA',
compile: function compile(element, attrs) {
return function($scope, $element, $attr) {
var serviceName = attrs.ifLoginService;
if (serviceName === 'facebook') {
// use compile to include and compile your content here
$compile($element.contents())($scope);
}
}
}
};
});
Демо-версия Plunker доступна здесь. Если он будет работать, кнопка "Facebook" будет отображаться, а кнопка "Not Facebook" - нет. В настоящее время отображаются обе кнопки, но я не уверен, где я ошибаюсь.
Вы должны использовать службу компиляции, чтобы написать свою директиву.
$compile('your html content here')($scope);
Чтобы очистить корневой элемент, такой как кнопка, используйте это:
$element[0].html('');
Или удалите его из DOM:
$element[0].parentNode.removeChild($element[0]);
Вот ваша директива отремонтирована:
var app = angular.module('plunker', ['ngSanitize']);
app.controller('MainCtrl', function($scope) {
$scope.model = {
toggle: 'true'
};
});
app.directive('ifLoginService', function($compile,$animate) {
return {
restrict: 'EA',
replace: true,
compile: function compile(element, attrs) {
return function($scope, $element, $attr) {
var serviceName = attrs.ifLoginService;
console.debug('Testing service name', serviceName);
if (serviceName === 'true') {
// use compile to include and compile your content here
$element.html($compile($element.contents())($scope));
}
else
{
$element[0].parentNode.removeChild($element[0]);
}
}
}
};
});
Ссылка на plunkr здесь
ng-if
в моем шаблоне директивы?