I have this html template into fileA.directive.html:
<md-button ng-click="resetForm()" class="btn btn-primary">Reset form</md-button>
<user-form reset-user-fn=""></user-form>
And into my fileA.directive.js:
app.directive("shopAppFormCustomer", function() {
return {
restrict: "E",
replace: true,
templateUrl: "fileA.directive.html",
scope: {},
controller: [
"$scope",
function($scope) {
$scope.resetForm = function () {
// want to call reset-user-fn here
}
}
]
};
})
Into my fileB.directive.js, I have the userForm
directive
app.directive("userForm", function() {
return {
restrict: "E",
replace: true,
templateUrl: "fileB.directive.html",
scope: {resetUserFn: "=" },
controller: [
"$scope",
function ($scope) {
$scope.resetUserFn = function () {
// reset goes here
}
}
]
}
Here's my question:
How can I trigger the attribute resetUserFn
into my fileB.directive.js into my fileA.directive.js?
Any source or documentation please.
Note: I won't to use custom event if it's possible.
The
<user-form>
directive assigns the parent scope propertyresetForm
to a reference to the function. Theng-click
directive invokes that function.To avoid memory leaks, be sure to
null
the property when the isolate scope is destroyed.So you want to trigger some method of child directive from parent directive. Unfortunately, AngularJS has no native support for such kind of problem. Here are some workaround for your consideration
Each approach is pretty ugly!
I suppose that there are some reasons why it is not natively supported. What if you have two or more
<user-form reset-user-fn=""></user-form>
directives undershopAppFormCustomer
parent directive? And you want to call toresetUserFn
of one particluraruserForm
directive, how to distinguish oneuserForm
from anotheruserForm
?This was somehow supported in Angualar 2 and higher, but the solution is not perfect either. So you have just to choose which solution from above is less painful for you and deal with it.
You should create a common service so that you can use everything inside the service anywhere you want. In this case, a function that can be used in both fileA.directive.js and fileB.directive.js.