angular-timer
angular-timer copied to clipboard
Countdown not allowing dynamic value
Hi,
I've not found a way to add a dynamic(scope) value in attr countdown.
Ex:
scope: {
interval: '=interval',
startTimeAttr: '=startTime',
endTimeAttr: '=endTime',
countdownattr: '=countdown',
countdown: '=',
I'm missing something? There is another way? Thanks.
I am also having this issue. I'm trying to put a scope variable into the countdown attribute and it fails with this error:
Error: [$parse:syntax] Syntax Error: Token 'selectedNotification.countdown' is unexpected, expecting [:] at column 3 of the expression [{{selectedNotification.countdown}}] starting at [selectedNotification.countdown}}].
However the fix doesn't appear to be working for me.
The fix works without the {{ }} Ex: countdown="timeLimit"
Same issue, same fix. The fix works without the {{ }}. Why don't you ask for a pull?
Ask for pull, please.
$scope.$broadcast 'timer-set-countdown', secs
This works.
Adding an ng-if
worked for me, ensuring the variable was ready to go before the directive was rendered.
So from:
<timer end-time="myVariable">{{minutes}} minute{{minutesS}}</timer>
To:
<timer ng-if="myVariable" end-time="myVariable">{{minutes}} minute{{minutesS}}</timer>
My example hasn't been tested for countdown
, but I'm pretty sure it will translate.
I don't think that adding countdown: '='
would be a good way to do things, as this is already set up with countdownattr: '=countdown'
, and it is countdownattr
that does all the magic.
You just need to delay rendering the directive until the point in the $digest
cycle when your variable has been evaluated with an ng-if
.
Hope this helps.
EDIT: More info on Angular's rendering cycle here: [ http://stackoverflow.com/questions/24615103/angular-directives-when-and-how-to-use-compile-controller-pre-link-and-post?rq=1 ]
Yes this was the reason. The variable was not set yet. I fixed it using a django template variable instead of a angular variable which was not always set. Your method with ng-if sounds good too.
@FelixFortis I tried that before, but the problem with that is first off end-time doesn't work at all, second, the moment it is assigned it will start with whatever time that was last rendered, then takes about a sec to update to the current value, meaning you will get a 1 or 2 sec flash. So this is not optimal in my opinion.
+1 for ng-if solution....
works fine:
<timer ng-if="vm.countdown" countdown="vm.countdown"
NaN:
<timer countdown="vm.countdown"
+1 for ng-if solution
+1 for ng-if solution ..i tried many ways except ng-if...Wowww its worked perfectly
👍 for @wtczk it work for me thanks you :)