angular指令如何第一时间获取到数据问题

使用angular指令时,我在指令里(指令里我需要用到数据)无法第一时间获取到当前数据,必须点击页面上的主页按钮才可以获取到,这是咋回事。数据是在调用这个指令的控制器里用服务获取到然后成功后处理的。
代码如下:
function sayHow(){

return {
    restrict:'A',
    replace:true,
    template:'<div id="ca"></div>',
    scope:false,
    link:function(scope,element){
            $('#ca').calendar({
    width: 248,
    height: 270,
    data:scope.calInit, //就是这里,这个数组是在控制器里定义的。在页面是可以遍历出来的但是这里好像是获取不到,要切换其他选项再点击回来才可以
    onSelected: function (view, date, data) {
        function formatTen(num) { 
            return num > 9 ? (num + "") : ("0" + num); 
        } 
        function formatDate(date) { 
            var year = date.getFullYear(); 
            var month = date.getMonth() + 1; 
            var day = date.getDate(); 
            var hour = date.getHours(); 
            var minute = date.getMinutes(); 
            var second = date.getSeconds(); 
            return year + "-" + formatTen(month) + "-" + formatTen(day); 
        }
        var str = formatDate(date);
        scope.inquiryCalendarEvents(str);    
      }
});
        }
    }

}

阅读 2.7k
2 个回答

你在代码里面写一个scope.$watch('calInit', function(val, oldVal){debugger;});你调试下,看开始是没有,还是说数据就是没定义。
因为你以上只描述了一部门,所以没办法判断

加一层$timeOut来进入angular的digest循环

.directive("calendar", function($timeOut) {
    return {
        restrict: 'A',
        replace: true,
        template: '<div id="ca"></div>',
        scope: false,
        link: function(scope, element) {
            $timeOut(function() {
                $('#ca').calendar({
                    width: 248,
                    height: 270,
                    data: scope.calInit, //就是这里,这个数组是在控制器里定义的。在页面是可以遍历出来的但是这里好像是获取不到,要切换其他选项再点击回来才可以
                    onSelected: function(view, date, data) {
                        function formatTen(num) {
                            return num > 9 ? (num + "") : ("0" + num);
                        }

                        function formatDate(date) {
                            var year = date.getFullYear();
                            var month = date.getMonth() + 1;
                            var day = date.getDate();
                            var hour = date.getHours();
                            var minute = date.getMinutes();
                            var second = date.getSeconds();
                            return year + "-" + formatTen(month) + "-" + formatTen(day);
                        }
                        var str = formatDate(date);
                        scope.inquiryCalendarEvents(str);
                    }
                });
            })
        }
    }
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题