19

Testing ui-router for the fist time but testing the Events at the moment and I can't seem to understand how to trigger $viewContentLoaded or Loading. Although, I've got stageChangeSuccess, etc working! I just pushed everything to http://punkbit.com/space_competition/ but also added some code here. I expected to trigger the events when a new view is loaded to ui-view. But I guess I'm missing something here!

    <div class="pure-g">
        <div class="pure-u-1" ui-view>
        </div>
    </div>


    <!-- s: template partials -->
    <script type="text/ng-template" id="menu.html">
    <div class="pure-menu pure-menu-open pure-menu-horizontal">
        <ul>
            <li><a href="#/home">home</a></li>
            <li class="pure-menu-selected"><a href="#/like_gate">like_gate</a></li>
            <li><a href="#/terms_and_conditions">terms_and_conditions</a></li>
            <li><a href="#/enter_competition">enter_competition</a></li>
        </ul>
    </div>
    </script>
    <script type="text/ng-template" id="home.html">
    <p>home.html template! fbLike is {{fbLike}}</p>
    </script>
    <script type="text/ng-template" id="enter_competition.html">
    <p>enter_competition.html template!</p>
    </script>
    <script type="text/ng-template" id="like_gate.html">
    <p>like.html template!</p>
    </script>
    <script type="text/ng-template" id="terms_and_conditions.html">
    <p>terms_and_conditions.html template!</p>
    </script>
    <!-- e: template partials -->

main.js

angular.module("space_competition", ['ui.router'])

.config(function($stateProvider, $urlRouterProvider, $locationProvider){

    $stateProvider
        .state('home', {
            url: '/home',
            templateUrl: 'home.html',
            controller: 'homeCtrl',
            resolve: {
                fb_like: 'fbLike'
            }
        })
        .state('enter_competition', {
            url: '/enter_competition',
            templateUrl: 'enter_competition.html',
            controller: 'enterCompetitionCtrl',
            resolve: {
                fb_like: 'fbLike'
            }
        })
        .state('like_gate', {
            url: '/like_gate',
            templateUrl: 'like_gate.html',
            controller: 'likeGateCtrl'
        })
        .state('terms_and_conditions', {
            url: '/terms_and_conditions',
            templateUrl: 'terms_and_conditions.html',
            controller: 'termsAndConditionsCtrl'
        });

        $urlRouterProvider.otherwise("/home");

        //$locationProvider.hashPrefix('!');

})

.run(function($rootScope){

    $rootScope
        .$on('$stateChangeStart', 
            function(event, toState, toParams, fromState, fromParams){ 
                console.log("State Change: transition begins!");
        });

    $rootScope
        .$on('$stateChangeSuccess',
            function(event, toState, toParams, fromState, fromParams){ 
                console.log("State Change: State change success!");
        });

    $rootScope
        .$on('$stateChangeError',
            function(event, toState, toParams, fromState, fromParams){ 
                console.log("State Change: Error!");
        });

    $rootScope
        .$on('$stateNotFound',
            function(event, toState, toParams, fromState, fromParams){ 
                console.log("State Change: State not found!");
        });

    $rootScope
        .$on('$viewContentLoading',
            function(event, viewConfig){ 
                console.log("View Load: the view is loaded, and DOM rendered!");
        });

    $rootScope
        .$on('$viewcontentLoaded',
            function(event, viewConfig){ 
                console.log("View Load: the view is loaded, and DOM rendered!");
        });

})

.controller('homeCtrl', function($scope, fbLike){

    $scope.fbLike = fbLike.liked();

})

.controller('enterCompetitionCtrl', function($scope, fbLike){

    fbLike.liked();

})

.controller('likeGateCtrl', function($scope){

})

.controller('termsAndConditionsCtrl', function($scope){

})

.factory('fbLike', function($http, $q){

    return {

        liked: function(){
            return true;
        }

    };

});

Anyone experienced could have a look please ?

Thanks : D

2 Answers 2

15

it looks like you have $viewcontentLoaded instead of $viewContentLoaded. did you forget to camel-case-capitalize the C?

Sign up to request clarification or add additional context in comments.

2 Comments

thanks so much! I didn't noticed at all, it's working nicely for $viewContentLoaded, didn't noticed :)
this event is fired when the dom is added but before angular has finished processing the dom. You can test this by adding a id or class as angular variable and try to find it in $viewContentLoaded with jQuery. You will not find it.
1

The $viewContentLoading event is now correctly firing with release 0.2.11: fix(state): allow view content loading broadcast

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.