Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
angular.module('sipSsoLogin.directive', [ 'sipCommonI18n', 'sipSsoLogin.controller' ]).directive('sipSsoLogin', function () {
var buttonTemplate = '<button id="sipSsoProvider_%PROVIDER%" ng-click="onProviderSelected(\'%PROVIDER%\')"><div class="sipSsoProvider sipSsoProvider_%PROVIDER%"></div></button>';
function getProviderButtonTemplate(provider) {
return buttonTemplate.split("%PROVIDER%").join(provider);
};
return {
restrict: 'E',
template:
'<div ng-controller="sipSsoLogin">' +
'<div class="sipSsoPanel_text" sip-common-i18n="sso.login.directive" />' +
'<div>' +
getProviderButtonTemplate('google') +
getProviderButtonTemplate('yahoo') +
getProviderButtonTemplate('yandex') +
getProviderButtonTemplate('twitter') +
'</div><div>' +
getProviderButtonTemplate('openid') +
getProviderButtonTemplate('myopenid') +
getProviderButtonTemplate('facebook') +
getProviderButtonTemplate('vkontakte') +
'</div><div class="sipSsoPanel_inputContainer">' +
'<button style="float: right; margin: 0px 10px 0px 10px;" sip-common-i18n="sso.button.login"></button>' +
'<div style="overflow: hidden;" class="sipSsoPanel_inputField">' +
'<span style="float: left; padding-right: 5px; vertical-align: middle;">{{prefix}}</span>' +
'<div style="overflow: hidden">' +
'<input style="display: inline-block; width: 100%;" type="text" value="{{user}}">' +
'</div>' +
'</div>' +
'</div>',
replace: true
};
});
angular.module('sipSsoLogin.directive', [ 'sipCommonI18n', 'sipSsoLogin.controller' ]).directive('sipSsoLogin', function () {
return {
restrict: 'E',
templateUrl: 'loginPanel.html',
replace: true
};
});
<div ng-controller="sipSsoLogin">
<div class="sipSsoPanel_text" sip-common-i18n="sso.login.directive" />
<div ng-repeat="prov in providers">
<button id="{{prov.sipSsoProviderId" ng-click="onProviderSelected(prov)">
<div ng-class="prov.sipSsoProvider"></div>
</button>
</div>
<div class="sipSsoPanel_inputContainer">
<button class="..." sip-common-i18n="sso.button.login"></button>
<div class="..." class="sipSsoPanel_inputField">
<span class="...">{{prefix}}</span>
<div class="...">
<input type="text" value="{{user}}">
</div>
</div>
</div>
</div>
<div ng-include="'loginPanel.html'"></div>
1. Необходимо всю разметку перенести в отдельный файл-шаблон и заменить опцию template на templateUrl.
<body ng-controller="mainController">
...
</body>
function forExampleController($scope) {
$scope.word="Habrahabra";
$scope.log="";
}
angular.module('app').controller('SomeCtrl', ['$scope', function ($scope) {
...
SomeCtrl.$inject = ['$scope'];(function () {
angular.module('myModule').directive('myDirective', MyDirective)
MyDirective.$inject = ['$scope', '$http']
function MyDirective ($scope, $http) {
// bla bla bla
}
})()
compile: function compile(templateElement, templateAttrs) {
templateElement.html("<div>{{"+templateAttrs.habraHabrWork+"}}"+templateAttrs.habra+"</div>");
return function (scope, element, attrs) {
}
}compile: function compile(temaplateElement, templateAttrs) {
templateElement.html("<div>{{"+templateAttrs.habraHabrWork+"}}"+templateAttrs.habra+"</div>");
},
link: function (scope, element, attrs) {
}преобразуется соответственно из habra-habr, habra:habr и т.д.
Написать строчку комментария про $watch. Для новичков же статья
Непонятно, зачем писать «внутри директивы interpolate "{{}}"», если проще написать: внутри выражения "{{}}"
Почему второй пример записывается так:
compile: function compile(templateElement, templateAttrs) { templateElement.html("{{"+templateAttrs.habraHabrWork+"}}"+templateAttrs.habra+""); return function (scope, element, attrs) { } }
а не так, в соответствии с приведенным выше расширенным описанием директивы
compile: function compile(temaplateElement, templateAttrs) { templateElement.html("{{"+templateAttrs.habraHabrWork+"}}"+templateAttrs.habra+""); }, link: function (scope, element, attrs) { }
Директивы в Angularjs для начинающих. Часть 1