Angular-Fullcalendar Unable to use Fullcalendar methods










0















I'm using angular-fullcalendar with my angularjs 1.6 app. The calendar renders great and overall working good. I'm using a custom date selector directive that passes a date to Fullcalendar, but when I try to use the gotoDate method in my directive's JS I keep getting the error $(...).fullCalendar() is not a function.



I have jQuery (v3.2.1), moment.js, angular-fullcalendar.min.js, and fullcalendar.min.js (v3.9) all loaded.



What am I missing that's preventing me from using .fullcalendar() methods?



index.html



<script type="text/javascript" src="/Scripts/angular.min.js"></script>
<script type="text/javascript" src="/Scripts/moment.js?"></script>
<link href="/Scripts/fullcalendar.min.css?" type="text/css" rel="stylesheet">
<script type="text/javascript" src="/Scripts/angular-fullcalendar.min.js?"></script>
<script type="text/javascript" src="/Scripts/fullcalendar.min.js?"></script>


app.js



let appModule = angular.module('Events',
[
EventsServices,
EventSheet,
'angular-fullcalendar'
]);


eventsheet.html



<div fc fc-options="calendarOptions" ng-if="selectedDate" ng-model="eventsArr" class="fullcalendar"></div>


eventsheet index.js



<script>
$scope.$watch('selectedDate', (date, oldDate) => );
</script>









share|improve this question
























  • could you show your code?

    – BartoszTermena
    Nov 12 '18 at 16:22






  • 1





    Updated the original post to include code related to the angular-fullcalendar

    – frostbyte
    Nov 12 '18 at 16:59















0















I'm using angular-fullcalendar with my angularjs 1.6 app. The calendar renders great and overall working good. I'm using a custom date selector directive that passes a date to Fullcalendar, but when I try to use the gotoDate method in my directive's JS I keep getting the error $(...).fullCalendar() is not a function.



I have jQuery (v3.2.1), moment.js, angular-fullcalendar.min.js, and fullcalendar.min.js (v3.9) all loaded.



What am I missing that's preventing me from using .fullcalendar() methods?



index.html



<script type="text/javascript" src="/Scripts/angular.min.js"></script>
<script type="text/javascript" src="/Scripts/moment.js?"></script>
<link href="/Scripts/fullcalendar.min.css?" type="text/css" rel="stylesheet">
<script type="text/javascript" src="/Scripts/angular-fullcalendar.min.js?"></script>
<script type="text/javascript" src="/Scripts/fullcalendar.min.js?"></script>


app.js



let appModule = angular.module('Events',
[
EventsServices,
EventSheet,
'angular-fullcalendar'
]);


eventsheet.html



<div fc fc-options="calendarOptions" ng-if="selectedDate" ng-model="eventsArr" class="fullcalendar"></div>


eventsheet index.js



<script>
$scope.$watch('selectedDate', (date, oldDate) => );
</script>









share|improve this question
























  • could you show your code?

    – BartoszTermena
    Nov 12 '18 at 16:22






  • 1





    Updated the original post to include code related to the angular-fullcalendar

    – frostbyte
    Nov 12 '18 at 16:59













0












0








0








I'm using angular-fullcalendar with my angularjs 1.6 app. The calendar renders great and overall working good. I'm using a custom date selector directive that passes a date to Fullcalendar, but when I try to use the gotoDate method in my directive's JS I keep getting the error $(...).fullCalendar() is not a function.



I have jQuery (v3.2.1), moment.js, angular-fullcalendar.min.js, and fullcalendar.min.js (v3.9) all loaded.



What am I missing that's preventing me from using .fullcalendar() methods?



index.html



<script type="text/javascript" src="/Scripts/angular.min.js"></script>
<script type="text/javascript" src="/Scripts/moment.js?"></script>
<link href="/Scripts/fullcalendar.min.css?" type="text/css" rel="stylesheet">
<script type="text/javascript" src="/Scripts/angular-fullcalendar.min.js?"></script>
<script type="text/javascript" src="/Scripts/fullcalendar.min.js?"></script>


app.js



let appModule = angular.module('Events',
[
EventsServices,
EventSheet,
'angular-fullcalendar'
]);


eventsheet.html



<div fc fc-options="calendarOptions" ng-if="selectedDate" ng-model="eventsArr" class="fullcalendar"></div>


eventsheet index.js



<script>
$scope.$watch('selectedDate', (date, oldDate) => );
</script>









share|improve this question
















I'm using angular-fullcalendar with my angularjs 1.6 app. The calendar renders great and overall working good. I'm using a custom date selector directive that passes a date to Fullcalendar, but when I try to use the gotoDate method in my directive's JS I keep getting the error $(...).fullCalendar() is not a function.



I have jQuery (v3.2.1), moment.js, angular-fullcalendar.min.js, and fullcalendar.min.js (v3.9) all loaded.



What am I missing that's preventing me from using .fullcalendar() methods?



index.html



<script type="text/javascript" src="/Scripts/angular.min.js"></script>
<script type="text/javascript" src="/Scripts/moment.js?"></script>
<link href="/Scripts/fullcalendar.min.css?" type="text/css" rel="stylesheet">
<script type="text/javascript" src="/Scripts/angular-fullcalendar.min.js?"></script>
<script type="text/javascript" src="/Scripts/fullcalendar.min.js?"></script>


app.js



let appModule = angular.module('Events',
[
EventsServices,
EventSheet,
'angular-fullcalendar'
]);


eventsheet.html



<div fc fc-options="calendarOptions" ng-if="selectedDate" ng-model="eventsArr" class="fullcalendar"></div>


eventsheet index.js



<script>
$scope.$watch('selectedDate', (date, oldDate) => );
</script>






javascript angularjs fullcalendar






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 12 '18 at 16:58







frostbyte

















asked Nov 12 '18 at 16:18









frostbytefrostbyte

265




265












  • could you show your code?

    – BartoszTermena
    Nov 12 '18 at 16:22






  • 1





    Updated the original post to include code related to the angular-fullcalendar

    – frostbyte
    Nov 12 '18 at 16:59

















  • could you show your code?

    – BartoszTermena
    Nov 12 '18 at 16:22






  • 1





    Updated the original post to include code related to the angular-fullcalendar

    – frostbyte
    Nov 12 '18 at 16:59
















could you show your code?

– BartoszTermena
Nov 12 '18 at 16:22





could you show your code?

– BartoszTermena
Nov 12 '18 at 16:22




1




1





Updated the original post to include code related to the angular-fullcalendar

– frostbyte
Nov 12 '18 at 16:59





Updated the original post to include code related to the angular-fullcalendar

– frostbyte
Nov 12 '18 at 16:59












1 Answer
1






active

oldest

votes


















0














Turns out angular-fullcalendar does not bind the calendar object to the controller. Using code from ui-fullcalendar (which I couldn't get working with my event array), I updated the angular-fullcalendar.js to the following (see lines with comments).



angular.module('angular-fullcalendar', )
.constant('CALENDAR_DEFAULTS', // *** New ***
calendars:
)
.value('CALENDAR_DEFAULTS',
locale: 'en'
)
.directive('fc', ['CALENDAR_DEFAULTS', fcDirectiveFn]);
function fcDirectiveFn(CALENDAR_DEFAULTS)
return
restrict: 'A',
scope:
eventSource: '=ngModel',
options: '=fcOptions'
,
link: function (scope, elm, attrs) // *** added attrs ***
var calendar;
init();
scope.$watch('eventSource', watchDirective, true);
scope.$watch('options', watchDirective, true);
scope.$on('$destroy', function ()
destroy();
);

function init()
if (!calendar)
calendar = $(elm).html('');

calendar.fullCalendar(getOptions(scope.options));

if (attrs.calendar) // *** New ***
CALENDAR_DEFAULTS.calendars[attrs.calendar] = calendar;



function destroy()
if (calendar && calendar.fullCalendar)
calendar.fullCalendar('destroy');


if (attrs.calendar) // *** New ***
calendar = CALENDAR_DEFAULTS.calendars[attrs.calendar] = angular.element(elm).html('');
else
calendar = angular.element(elm).html('');


function getOptions(options)
const event_source = scope.eventSource;
let isMultiSource = false;
Object.keys(event_source[0]).forEach(key =>
if (key === "events")
isMultiSource = true;

)

if (isMultiSource)
return angular.extend(CALENDAR_DEFAULTS,
eventSources: event_source
, options);
else
return angular.extend(CALENDAR_DEFAULTS,
events: event_source
, options);




function watchDirective(newOptions, oldOptions)
if (newOptions !== oldOptions)
destroy();
init();
else if ((newOptions && angular.isUndefined(calendar)))
init();



;



Using the above JS, include CALENDAR_DEFAULTS in your controller dependencies. Update your fullcalendar div to include a calendar value:



<div fc fc-options="calendarOptions" ng-model="eventsArray" calendar="myCalendar"></div>


Now you can target your calendar and use fullcalendar methods!



CALENDAR_DEFAULTS.calendars.myCalendar.fullCalendar('gotoDate', newDate);





share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53266136%2fangular-fullcalendar-unable-to-use-fullcalendar-methods%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Turns out angular-fullcalendar does not bind the calendar object to the controller. Using code from ui-fullcalendar (which I couldn't get working with my event array), I updated the angular-fullcalendar.js to the following (see lines with comments).



    angular.module('angular-fullcalendar', )
    .constant('CALENDAR_DEFAULTS', // *** New ***
    calendars:
    )
    .value('CALENDAR_DEFAULTS',
    locale: 'en'
    )
    .directive('fc', ['CALENDAR_DEFAULTS', fcDirectiveFn]);
    function fcDirectiveFn(CALENDAR_DEFAULTS)
    return
    restrict: 'A',
    scope:
    eventSource: '=ngModel',
    options: '=fcOptions'
    ,
    link: function (scope, elm, attrs) // *** added attrs ***
    var calendar;
    init();
    scope.$watch('eventSource', watchDirective, true);
    scope.$watch('options', watchDirective, true);
    scope.$on('$destroy', function ()
    destroy();
    );

    function init()
    if (!calendar)
    calendar = $(elm).html('');

    calendar.fullCalendar(getOptions(scope.options));

    if (attrs.calendar) // *** New ***
    CALENDAR_DEFAULTS.calendars[attrs.calendar] = calendar;



    function destroy()
    if (calendar && calendar.fullCalendar)
    calendar.fullCalendar('destroy');


    if (attrs.calendar) // *** New ***
    calendar = CALENDAR_DEFAULTS.calendars[attrs.calendar] = angular.element(elm).html('');
    else
    calendar = angular.element(elm).html('');


    function getOptions(options)
    const event_source = scope.eventSource;
    let isMultiSource = false;
    Object.keys(event_source[0]).forEach(key =>
    if (key === "events")
    isMultiSource = true;

    )

    if (isMultiSource)
    return angular.extend(CALENDAR_DEFAULTS,
    eventSources: event_source
    , options);
    else
    return angular.extend(CALENDAR_DEFAULTS,
    events: event_source
    , options);




    function watchDirective(newOptions, oldOptions)
    if (newOptions !== oldOptions)
    destroy();
    init();
    else if ((newOptions && angular.isUndefined(calendar)))
    init();



    ;



    Using the above JS, include CALENDAR_DEFAULTS in your controller dependencies. Update your fullcalendar div to include a calendar value:



    <div fc fc-options="calendarOptions" ng-model="eventsArray" calendar="myCalendar"></div>


    Now you can target your calendar and use fullcalendar methods!



    CALENDAR_DEFAULTS.calendars.myCalendar.fullCalendar('gotoDate', newDate);





    share|improve this answer



























      0














      Turns out angular-fullcalendar does not bind the calendar object to the controller. Using code from ui-fullcalendar (which I couldn't get working with my event array), I updated the angular-fullcalendar.js to the following (see lines with comments).



      angular.module('angular-fullcalendar', )
      .constant('CALENDAR_DEFAULTS', // *** New ***
      calendars:
      )
      .value('CALENDAR_DEFAULTS',
      locale: 'en'
      )
      .directive('fc', ['CALENDAR_DEFAULTS', fcDirectiveFn]);
      function fcDirectiveFn(CALENDAR_DEFAULTS)
      return
      restrict: 'A',
      scope:
      eventSource: '=ngModel',
      options: '=fcOptions'
      ,
      link: function (scope, elm, attrs) // *** added attrs ***
      var calendar;
      init();
      scope.$watch('eventSource', watchDirective, true);
      scope.$watch('options', watchDirective, true);
      scope.$on('$destroy', function ()
      destroy();
      );

      function init()
      if (!calendar)
      calendar = $(elm).html('');

      calendar.fullCalendar(getOptions(scope.options));

      if (attrs.calendar) // *** New ***
      CALENDAR_DEFAULTS.calendars[attrs.calendar] = calendar;



      function destroy()
      if (calendar && calendar.fullCalendar)
      calendar.fullCalendar('destroy');


      if (attrs.calendar) // *** New ***
      calendar = CALENDAR_DEFAULTS.calendars[attrs.calendar] = angular.element(elm).html('');
      else
      calendar = angular.element(elm).html('');


      function getOptions(options)
      const event_source = scope.eventSource;
      let isMultiSource = false;
      Object.keys(event_source[0]).forEach(key =>
      if (key === "events")
      isMultiSource = true;

      )

      if (isMultiSource)
      return angular.extend(CALENDAR_DEFAULTS,
      eventSources: event_source
      , options);
      else
      return angular.extend(CALENDAR_DEFAULTS,
      events: event_source
      , options);




      function watchDirective(newOptions, oldOptions)
      if (newOptions !== oldOptions)
      destroy();
      init();
      else if ((newOptions && angular.isUndefined(calendar)))
      init();



      ;



      Using the above JS, include CALENDAR_DEFAULTS in your controller dependencies. Update your fullcalendar div to include a calendar value:



      <div fc fc-options="calendarOptions" ng-model="eventsArray" calendar="myCalendar"></div>


      Now you can target your calendar and use fullcalendar methods!



      CALENDAR_DEFAULTS.calendars.myCalendar.fullCalendar('gotoDate', newDate);





      share|improve this answer

























        0












        0








        0







        Turns out angular-fullcalendar does not bind the calendar object to the controller. Using code from ui-fullcalendar (which I couldn't get working with my event array), I updated the angular-fullcalendar.js to the following (see lines with comments).



        angular.module('angular-fullcalendar', )
        .constant('CALENDAR_DEFAULTS', // *** New ***
        calendars:
        )
        .value('CALENDAR_DEFAULTS',
        locale: 'en'
        )
        .directive('fc', ['CALENDAR_DEFAULTS', fcDirectiveFn]);
        function fcDirectiveFn(CALENDAR_DEFAULTS)
        return
        restrict: 'A',
        scope:
        eventSource: '=ngModel',
        options: '=fcOptions'
        ,
        link: function (scope, elm, attrs) // *** added attrs ***
        var calendar;
        init();
        scope.$watch('eventSource', watchDirective, true);
        scope.$watch('options', watchDirective, true);
        scope.$on('$destroy', function ()
        destroy();
        );

        function init()
        if (!calendar)
        calendar = $(elm).html('');

        calendar.fullCalendar(getOptions(scope.options));

        if (attrs.calendar) // *** New ***
        CALENDAR_DEFAULTS.calendars[attrs.calendar] = calendar;



        function destroy()
        if (calendar && calendar.fullCalendar)
        calendar.fullCalendar('destroy');


        if (attrs.calendar) // *** New ***
        calendar = CALENDAR_DEFAULTS.calendars[attrs.calendar] = angular.element(elm).html('');
        else
        calendar = angular.element(elm).html('');


        function getOptions(options)
        const event_source = scope.eventSource;
        let isMultiSource = false;
        Object.keys(event_source[0]).forEach(key =>
        if (key === "events")
        isMultiSource = true;

        )

        if (isMultiSource)
        return angular.extend(CALENDAR_DEFAULTS,
        eventSources: event_source
        , options);
        else
        return angular.extend(CALENDAR_DEFAULTS,
        events: event_source
        , options);




        function watchDirective(newOptions, oldOptions)
        if (newOptions !== oldOptions)
        destroy();
        init();
        else if ((newOptions && angular.isUndefined(calendar)))
        init();



        ;



        Using the above JS, include CALENDAR_DEFAULTS in your controller dependencies. Update your fullcalendar div to include a calendar value:



        <div fc fc-options="calendarOptions" ng-model="eventsArray" calendar="myCalendar"></div>


        Now you can target your calendar and use fullcalendar methods!



        CALENDAR_DEFAULTS.calendars.myCalendar.fullCalendar('gotoDate', newDate);





        share|improve this answer













        Turns out angular-fullcalendar does not bind the calendar object to the controller. Using code from ui-fullcalendar (which I couldn't get working with my event array), I updated the angular-fullcalendar.js to the following (see lines with comments).



        angular.module('angular-fullcalendar', )
        .constant('CALENDAR_DEFAULTS', // *** New ***
        calendars:
        )
        .value('CALENDAR_DEFAULTS',
        locale: 'en'
        )
        .directive('fc', ['CALENDAR_DEFAULTS', fcDirectiveFn]);
        function fcDirectiveFn(CALENDAR_DEFAULTS)
        return
        restrict: 'A',
        scope:
        eventSource: '=ngModel',
        options: '=fcOptions'
        ,
        link: function (scope, elm, attrs) // *** added attrs ***
        var calendar;
        init();
        scope.$watch('eventSource', watchDirective, true);
        scope.$watch('options', watchDirective, true);
        scope.$on('$destroy', function ()
        destroy();
        );

        function init()
        if (!calendar)
        calendar = $(elm).html('');

        calendar.fullCalendar(getOptions(scope.options));

        if (attrs.calendar) // *** New ***
        CALENDAR_DEFAULTS.calendars[attrs.calendar] = calendar;



        function destroy()
        if (calendar && calendar.fullCalendar)
        calendar.fullCalendar('destroy');


        if (attrs.calendar) // *** New ***
        calendar = CALENDAR_DEFAULTS.calendars[attrs.calendar] = angular.element(elm).html('');
        else
        calendar = angular.element(elm).html('');


        function getOptions(options)
        const event_source = scope.eventSource;
        let isMultiSource = false;
        Object.keys(event_source[0]).forEach(key =>
        if (key === "events")
        isMultiSource = true;

        )

        if (isMultiSource)
        return angular.extend(CALENDAR_DEFAULTS,
        eventSources: event_source
        , options);
        else
        return angular.extend(CALENDAR_DEFAULTS,
        events: event_source
        , options);




        function watchDirective(newOptions, oldOptions)
        if (newOptions !== oldOptions)
        destroy();
        init();
        else if ((newOptions && angular.isUndefined(calendar)))
        init();



        ;



        Using the above JS, include CALENDAR_DEFAULTS in your controller dependencies. Update your fullcalendar div to include a calendar value:



        <div fc fc-options="calendarOptions" ng-model="eventsArray" calendar="myCalendar"></div>


        Now you can target your calendar and use fullcalendar methods!



        CALENDAR_DEFAULTS.calendars.myCalendar.fullCalendar('gotoDate', newDate);






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 17 '18 at 0:22









        frostbytefrostbyte

        265




        265





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53266136%2fangular-fullcalendar-unable-to-use-fullcalendar-methods%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            Edmonton

            Crossroads (UK TV series)