Poniższa funkcja definiuje zmienną w korzeniec.nie można uzyskać dostępu do korzeniac var w zakresie dyrektywy
function MyCtrl($scope, $rootScope) {
$rootScope.buttons = [{href: '#/students', icon:'icon-ok'},
{href: '#/students', icon:'icon-remove'},
{href: '#/students/new', icon:'icon-plus'}];
}
MyCtrl.$inject = ['$scope', '$rootScope'];
HTML w dyrektywie poniżej zależy od zmiennej w rootscope -
angular.module('btnbar.directive', []).
directive("btnBar", function(){
return {
restrict: 'E',
scope :{},
controller: function($scope, $element,$rootScope) {
},
template:'<div class="btn-toolbar">' +
'<a class="btn" ng-repeat="b in buttons" href={{b.href}}>' +
'<i class={{b.icon}}></i></a></div>',
replace:true
}
});
Jednakże powyższy kod pracy robi. Działa, jeśli bezpośrednio zdefiniuję zmienną "guziki" w zakresie dyrektywy.
Jim dzięki za wielki post. Jedno pytanie, dlaczego muszę określić przyciski = "przyciski" w moim atrybucie. Co też robi? Dlaczego kod nie działa bez powyższej deklaracji atrybutu? – murtaza52
, ponieważ kontroler dyrektywy akceptuje zakres, element, atrybut i transclude, trzeci parametr to $ rootScope, który jest faktycznie parametrem atrybutu. tutaj jest kod kontrolera ur: funkcja ($ scope, $ element, $ rootScope). Teraz zobacz dokumentację http://docs.angularjs.org/guide/directive – AsadYarKhan
@AsadYarKhan Myślę, że mylisz kontroler z linkiem i kompilujesz. – Usagi