Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Директива не отрабатывает без таймаута. (https://javascript.ru/forum/angular/50601-direktiva-ne-otrabatyvaet-bez-tajjmauta.html)

dramoturg 03.10.2014 17:38

Директива не отрабатывает без таймаута.
 
Всем привет. хотел на ангуляре написать небольшую директиву обвертку для fabricjs canvas http://fabricjs.com/. Директиву написал
Код:

App.directive('tFabric', function($rootScope){
        return {
                restrict: 'A',
                replace: true,
                template: '<canvas id="{{id}}"></canvas>',
                scope: {
                        id: '@tFabric',
                        width: '@width',
                        height: '@height'
                },
                link: function(scope, element) {
                        var c = new fabric.Canvas(scope.id);
                        c.setWidth(scope.width);
                        c.setHeight(scope.height);
                }
        };
});

но почему то она не отрабатывает. ошибок никаких нету. но если в link
добавить timeout
Код:

link: function(scope, element) {
                        setTimeout(function(){
                                var c = new fabric.Canvas(scope.id);
                                c.setWidth(scope.width);
                                c.setHeight(scope.height);
                        },100);
                       
                }

все начинает работать. в чем может быть причина. что я упустил :-?

MetaDriver 16.10.2014 11:34

Цитата:

Сообщение от dramoturg (Сообщение 333312)
Всем привет. хотел на ангуляре написать небольшую директиву обвертку для fabricjs canvas http://fabricjs.com/. Директиву написал
Код:

...........
link: function(scope, element) {
                        var c = new fabric.Canvas(scope.id);
                        c.setWidth(scope.width);                        //  ??
                        c.setHeight(scope.height);                      //  ??
                }

но почему то она не отрабатывает. ошибок никаких нету. но если в link
добавить timeout
Код:

..............
все начинает работать. в чем может быть причина. что я упустил :-?

А где у тебя задаются значения scope.width и scope.height ?
Если ниже по коду, то и неудивительно.. :) Нужно чтобы на момент линковки они были определены и доступны.


Часовой пояс GMT +3, время: 03:52.