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

























asked Nov 12 '18 at 16:18









frostbyte

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









        frostbyte

        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.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • 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







            這個網誌中的熱門文章

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3

            Museum of Modern and Contemporary Art of Trento and Rovereto