Skip to content
This repository has been archived by the owner on Sep 24, 2020. It is now read-only.

Doesn't work when using controllerAs syntax #63

Open
johnnncodes opened this issue Dec 23, 2014 · 8 comments
Open

Doesn't work when using controllerAs syntax #63

johnnncodes opened this issue Dec 23, 2014 · 8 comments

Comments

@johnnncodes
Copy link

I'm getting this error when I submit the form:

TypeError: Cannot read property 'apply' of undefined

scope[attr.stripeForm].apply(scope, args);

 <form stripe-form="myCtrl.handleStripe" name="myCtrl.myForm">
@guilhemSoulas
Copy link

+1

1 similar comment
@sebastiannm
Copy link

+1

@rahil471
Copy link

Is this issue solved ?

@bendrucker
Copy link

No—the code as written handles the narrow case of the handler being directly published as a property on the scope. If you wanted to fix this, fork + change scope[attr... to:

$parse(attr.stripeForm)(scope).apply(scope, args)

However, the general implementation is already an anti-pattern and fixing this particular line doesn't change that. Using your template to pass up a callback is the biggest issue. You'll notice that directives that react to actions like ngSubmit typically take an expression that calls a function to evaluate itself, not an expression to evaluate that returns a function to be called from elsewhere:

<form ng-submit="create(user)"></form>

The reason the pattern of returning a function and then calling it internally is so problematic is that it very tightly couples you to the expectation that you don't have to do anything before getting the token. What if you decide you want to call a postal code lookup service so you only collect the postal code from the user but send the full address to Stripe? You're out of luck. You have to dig up all the stripe-form attributes and totally rewrite your form handling. That sort of logic belongs in code (in a controller), not tightly coupled to your templates.

Check out https://github.com/bendrucker/angular-stripe for a more flexible Stripe service, https://github.com/bendrucker/angular-credit-cards for validation and parsing, and https://github.com/bendrucker/angular-form-state for managing the submission state of any form (e.g. disabling the submit button during submission).

@ESimmonds
Copy link

👍

@salehrastani
Copy link

Yes!

@LunarDevelopment
Copy link

Dont forget, if you're lazy:

ControllerAs is just syntactic sugar and you can still inject $scope into your controllers and use this / any plugin as normal. with $scope and reserve your controlleras syntax for everything else you're doing.

@sabareeshkk
Copy link

any idea how to fix this?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants