Reputation: 4480
I have created a custom directive in my Angular app which includes a couple of ui-sref
links. I want this links to change according to the current state
, or template being loaded:
<toolbar-admin page="vm.page"></toolbar-admin>
My intention is to pass this information through an attribute so that the links will be generated based on the page
variable, as such:
<div id="toolbar" class="col-xs-12 no-pad border-bottom">
<ul class="nav navbar-nav no-collapse">
<li class="no-collapse">
<a ui-sref="admin.view({page: vm.page})" role="button"><span class="melon-icon-md melon-icon-back"></span></a>
</li>
<li class="no-collapse">
<a class="toolbar-title" lang-tag="ProjectOverview">Project Overview</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right force-right no-collapse">
<li class="no-collapse">
<a ui-sref="admin.edit({page: vm.page})" role="button"><span class="melon-icon-md melon-icon-edit"></span></a>
</li>
</ul>
</div>
However, a console.log
of scope.page
within the directive will output the exact string "vm.page"
instead of the page number that I want.
Here's the directive:
(function() {
'use strict';
angular
.module('melon')
.directive('toolbarAdmin', directive);
function directive() {
var directive = {
templateUrl: 'app/shared/directives/toolbar/toolbar.admin.html',
scope: {
page: '='
},
restrict: 'EA',
replace: 'true',
link: linkFunc,
controller: Controller,
controllerAs: 'vm',
bindToController: true
};
return directive;
function linkFunc(scope, el, attr, ctrl) {
scope.page = attr.page;
console.log(scope.page);
}
}
Controller.$inject = ['$rootScope', '$scope', '$state', '$stateParams'];
function Controller($rootScope, $scope, $state, $stateParams) {
var vm = this;
}
})();
How can I correctly pass the page variable to the toolbar-admin
directive?
Upvotes: 0
Views: 794
Reputation: 136184
You shouldn't be worry about the assignment of scope.page inside your directive controller as you have use page: '='
. That means you enabled two way binding vm.page
& directive page
variable.
function linkFunc(scope, el, attr, ctrl) {
scope.page = attr.page;
console.log(scope.page);
}
As your linking seems overriding actually binded value by attr.page
which would be vm.page
. And you are reassigning that variable to scope.page
If you remove the link
function will fix your issue of binding inside your directive.
Upvotes: 1