导航后视图内容时更改范围

时间:2016-11-18 10:35:11

标签: jquery angularjs flot

我正在使用angularjs,flot插件处理管理页面。我正在尝试在我的仪表板内容上绘制图表。我写了这样一个指令:

.directive('ngChartDirective',function(){
    return {
        controller : 'chartCtrl'
    };
});

这是仪表板内容中的ma div:

<div class="jarviswidget" ng-chart-directive id="wid-id-0" data-widget-togglebutton="false" data-widget-editbutton="false" data-widget-fullscreenbutton="false" data-widget-colorbutton="false" data-widget-deletebutton="false">
                <!-- widget options:
                usage: <div class="jarviswidget" id="wid-id-0" data-widget-editbutton="false">

                data-widget-colorbutton="false"
                data-widget-editbutton="false"
                data-widget-togglebutton="false"
                data-widget-deletebutton="false"
                data-widget-fullscreenbutton="false"
                data-widget-custombutton="false"
                data-widget-collapsed="true"
                data-widget-sortable="false"

                -->
                <header>
                    <span class="widget-icon"> <i class="glyphicon glyphicon-stats txt-color-darken"></i> </span>
                    <h2>Live Feeds</h2>

                    <ul class="nav nav-tabs pull-right in" id="myTab">
                        <li class="active">
                            <a data-toggle="tab" href="#s1"><i class="fa fa-clock-o"></i> <span class="hidden-mobile hidden-tablet">Live Stats test</span></a>
                        </li>

                        <li>
                            <a data-toggle="tab" href="#s2"><i class="fa fa-facebook"></i> <span class="hidden-mobile hidden-tablet">Social Network test</span></a>
                        </li>

                        <li>
                            <a data-toggle="tab" href="#s3"><i class="fa fa-dollar"></i> <span class="hidden-mobile hidden-tablet">Revenue</span></a>
                        </li>
                    </ul>

                </header>

                <!-- widget div-->
                <div class="no-padding">
                    <!-- widget edit box -->
                    <div class="jarviswidget-editbox">

                        test
                    </div>
                    <!-- end widget edit box -->

                    <div class="widget-body">
                        <!-- content -->
                        <div id="myTabContent" class="tab-content">
                            <div class="tab-pane fade active in padding-10 no-padding-bottom" id="s1">
                                <div class="row no-space">
                                    <div class="col-xs-12 col-sm-12 col-md-8 col-lg-8">
                                        <span class="demo-liveupdate-1"> <span class="onoffswitch-title">Live switch</span> <span class="onoffswitch">
                                                <input type="checkbox" name="start_interval" class="onoffswitch-checkbox" id="start_interval">
                                                <label class="onoffswitch-label" for="start_interval"> 
                                                    <span class="onoffswitch-inner" data-swchon-text="ON" data-swchoff-text="OFF"></span> 
                                                    <span class="onoffswitch-switch"></span> </label> </span> </span>
                                        <div id="updating-chart" class="chart-large txt-color-blue"></div>

                                    </div>
                                    <div class="col-xs-12 col-sm-12 col-md-4 col-lg-4 show-stats">

                                        <div class="row">
                                            <div class="col-xs-6 col-sm-6 col-md-12 col-lg-12"> <span class="text"> My Tasks <span class="pull-right">130/200</span> </span>
                                                <div class="progress">
                                                    <div class="progress-bar bg-color-blueDark" style="width: 65%;"></div>
                                                </div> </div>
                                            <div class="col-xs-6 col-sm-6 col-md-12 col-lg-12"> <span class="text"> Transfered <span class="pull-right">440 GB</span> </span>
                                                <div class="progress">
                                                    <div class="progress-bar bg-color-blue" style="width: 34%;"></div>
                                                </div> </div>
                                            <div class="col-xs-6 col-sm-6 col-md-12 col-lg-12"> <span class="text"> Bugs Squashed<span class="pull-right">77%</span> </span>
                                                <div class="progress">
                                                    <div class="progress-bar bg-color-blue" style="width: 77%;"></div>
                                                </div> </div>
                                            <div class="col-xs-6 col-sm-6 col-md-12 col-lg-12"> <span class="text"> User Testing <span class="pull-right">7 Days</span> </span>
                                                <div class="progress">
                                                    <div class="progress-bar bg-color-greenLight" style="width: 84%;"></div>
                                                </div> </div>

                                            <span class="show-stat-buttons"> <span class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <a href="javascript:void(0);" class="btn btn-default btn-block hidden-xs">Generate PDF</a> </span> <span class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <a href="javascript:void(0);" class="btn btn-default btn-block hidden-xs">Report a bug</a> </span> </span>

                                        </div>

                                    </div>
                                </div>

                                <div class="show-stat-microcharts">
                                    <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">

                                        <div class="easy-pie-chart txt-color-orangeDark" data-percent="33" data-pie-size="50">
                                            <span class="percent percent-sign">35</span>
                                        </div>
                                        <span class="easy-pie-title"> Server Load <i class="fa fa-caret-up icon-color-bad"></i> </span>
                                        <ul class="smaller-stat hidden-sm pull-right">
                                            <li>
                                                <span class="label bg-color-greenLight"><i class="fa fa-caret-up"></i> 97%</span>
                                            </li>
                                            <li>
                                                <span class="label bg-color-blueLight"><i class="fa fa-caret-down"></i> 44%</span>
                                            </li>
                                        </ul>
                                        <div class="sparkline txt-color-greenLight hidden-sm hidden-md pull-right" data-sparkline-type="line" data-sparkline-height="33px" data-sparkline-width="70px" data-fill-color="transparent">
                                            130, 187, 250, 257, 200, 210, 300, 270, 363, 247, 270, 363, 247
                                        </div>
                                    </div>
                                    <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
                                        <div class="easy-pie-chart txt-color-greenLight" data-percent="78.9" data-pie-size="50">
                                            <span class="percent percent-sign">78.9 </span>
                                        </div>
                                        <span class="easy-pie-title"> Disk Space <i class="fa fa-caret-down icon-color-good"></i></span>
                                        <ul class="smaller-stat hidden-sm pull-right">
                                            <li>
                                                <span class="label bg-color-blueDark"><i class="fa fa-caret-up"></i> 76%</span>
                                            </li>
                                            <li>
                                                <span class="label bg-color-blue"><i class="fa fa-caret-down"></i> 3%</span>
                                            </li>
                                        </ul>
                                        <div class="sparkline txt-color-blue hidden-sm hidden-md pull-right" data-sparkline-type="line" data-sparkline-height="33px" data-sparkline-width="70px" data-fill-color="transparent">
                                            257, 200, 210, 300, 270, 363, 130, 187, 250, 247, 270, 363, 247
                                        </div>
                                    </div>
                                    <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
                                        <div class="easy-pie-chart txt-color-blue" data-percent="23" data-pie-size="50">
                                            <span class="percent percent-sign">23 </span>
                                        </div>
                                        <span class="easy-pie-title"> Transfered <i class="fa fa-caret-up icon-color-good"></i></span>
                                        <ul class="smaller-stat hidden-sm pull-right">
                                            <li>
                                                <span class="label bg-color-darken">10GB</span>
                                            </li>
                                            <li>
                                                <span class="label bg-color-blueDark"><i class="fa fa-caret-up"></i> 10%</span>
                                            </li>
                                        </ul>
                                        <div class="sparkline txt-color-darken hidden-sm hidden-md pull-right" data-sparkline-type="line" data-sparkline-height="33px" data-sparkline-width="70px" data-fill-color="transparent">
                                            200, 210, 363, 247, 300, 270, 130, 187, 250, 257, 363, 247, 270
                                        </div>
                                    </div>
                                    <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
                                        <div class="easy-pie-chart txt-color-darken" data-percent="36" data-pie-size="50">
                                            <span class="percent degree-sign">36 <i class="fa fa-caret-up"></i></span>
                                        </div>
                                        <span class="easy-pie-title"> Temperature <i class="fa fa-caret-down icon-color-good"></i></span>
                                        <ul class="smaller-stat hidden-sm pull-right">
                                            <li>
                                                <span class="label bg-color-red"><i class="fa fa-caret-up"></i> 124</span>
                                            </li>
                                            <li>
                                                <span class="label bg-color-blue"><i class="fa fa-caret-down"></i> 40 F</span>
                                            </li>
                                        </ul>
                                        <div class="sparkline txt-color-red hidden-sm hidden-md pull-right" data-sparkline-type="line" data-sparkline-height="33px" data-sparkline-width="70px" data-fill-color="transparent">
                                            2700, 3631, 2471, 2700, 3631, 2471, 1300, 1877, 2500, 2577, 2000, 2100, 3000
                                        </div>
                                    </div>
                                </div>

                            </div>
                            <!-- end s1 tab pane -->

                            <div class="tab-pane fade" id="s2">
                                <div class="widget-body-toolbar bg-color-white">

                                    <form class="form-inline" role="form">

                                        <div class="form-group">
                                            <label class="sr-only" for="s123">Show From</label>
                                            <input type="email" class="form-control input-sm" id="s123" placeholder="Show From">
                                        </div>
                                        <div class="form-group">
                                            <input type="email" class="form-control input-sm" id="s124" placeholder="To">
                                        </div>

                                        <div class="btn-group hidden-phone pull-right">
                                            <a class="btn dropdown-toggle btn-xs btn-default" data-toggle="dropdown"><i class="fa fa-cog"></i> More <span class="caret"> </span> </a>
                                            <ul class="dropdown-menu pull-right">
                                                <li>
                                                    <a href="javascript:void(0);"><i class="fa fa-file-text-alt"></i> Export to PDF</a>
                                                </li>
                                                <li>
                                                    <a href="javascript:void(0);"><i class="fa fa-question-sign"></i> Help</a>
                                                </li>
                                            </ul>
                                        </div>

                                    </form>

                                </div>
                                <div class="padding-10">
                                    <div id="statsChart" class="chart-large has-legend-unique"></div>
                                </div>

                            </div>
                            <!-- end s2 tab pane -->

                            <div class="tab-pane fade" id="s3">

                                <div class="widget-body-toolbar bg-color-white smart-form" id="rev-toggles">

                                    <div class="inline-group">

                                        <label for="gra-0" class="checkbox">
                                            <input type="checkbox" name="gra-0" id="gra-0" checked="checked">
                                            <i></i> Target </label>
                                        <label for="gra-1" class="checkbox">
                                            <input type="checkbox" name="gra-1" id="gra-1" checked="checked">
                                            <i></i> Actual </label>
                                        <label for="gra-2" class="checkbox">
                                            <input type="checkbox" name="gra-2" id="gra-2" checked="checked">
                                            <i></i> Signups </label>
                                    </div>

                                    <div class="btn-group hidden-phone pull-right">
                                        <a class="btn dropdown-toggle btn-xs btn-default" data-toggle="dropdown"><i class="fa fa-cog"></i> More <span class="caret"> </span> </a>
                                        <ul class="dropdown-menu pull-right">
                                            <li>
                                                <a href="javascript:void(0);"><i class="fa fa-file-text-alt"></i> Export to PDF</a>
                                            </li>
                                            <li>
                                                <a href="javascript:void(0);"><i class="fa fa-question-sign"></i> Help</a>
                                            </li>
                                        </ul>
                                    </div>

                                </div>

                                <div class="padding-10">
                                    <div id="flotcontainer" class="chart-large has-legend-unique"></div>
                                </div>
                            </div>
                            <!-- end s3 tab pane -->
                        </div>

                        <!-- end content -->
                    </div>

                </div>
                <!-- end widget div -->
            </div>

和我的控制员:

.controller('chartCtrl', ['$scope', '$http', '$interval', function($scope, $http, $interval) {
    $scope.request = function(){
    var result;
    console.log("requesting");
    $http({method: 'GET', url: 'http://angularjs.khonet.com/datasource/database.php?type=chart-data'})
            .then(function (response) {
            result=response.data;
            $scope.chartData=result;console.log('done');
        });
    };

    $scope.firstLoad = function(callback){
        $http({method: 'GET', url: 'http://angularjs.khonet.com/datasource/database.php?type=chart-data'})
                .then(function (response) {
                result=response.data;
                $scope.chartData=result;
                console.log('start callback');
                callback();
        });
    };
    $scope.startCall = function(){
            $scope.inv=setInterval(function () {
            $scope.$apply(function () {
                $scope.request();
            });
        },1500);
    };
    $scope.endCall = function(){
        clearInterval($scope.inv);
    };

}])

这是我在仪表板视图中的脚本来绘制此图表:

var data = [],
            totalPoints = 200,
            $UpdatingChartColors = $("#updating-chart").css('color');

        // setup control widget
        var updateInterval = 1500;
        $("#updating-chart").val(updateInterval).change(function () {

            var v = $(this).val();
            if (v && !isNaN(+v)) {
                updateInterval = +v;
                $(this).val("" + updateInterval);
            }

        });

        // setup plot
        var options = {
            yaxis: {
                min: 0,
                max: 100
            },
            xaxis: {
                min: 0,
                max: 100
            },
            colors: [$UpdatingChartColors],
            series: {
                lines: {
                    lineWidth: 1,
                    fill: true,
                    fillColor: {
                        colors: [{
                            opacity: 0.4
                        }, {
                            opacity: 0
                        }]
                    },
                    steps: false

                }
            }
        };
        var plot = undefined;
        var scope = angular.element($("#wid-id-0")).scope();
        scope.firstLoad(function(){
            var tempData = scope.chartData;
            plot = $.plot($("#updating-chart"), [tempData], options);
            console.log('callback end');
        });
        /* live switch */
        $('input[type="checkbox"]#start_interval').click(function () {
            if ($(this).prop('checked')) {
                $on = true;
                updateInterval = 1500;
                scope.startCall();
                update();
            } else {
                //var scope = angular.element($("#wid-id-0")).scope();
                scope.endCall();
                clearInterval(updateInterval);
                $on = false;
            }
        });

        function update() {
            if ($on == true) {
                //console.log('updated');
                if(Array.isArray(scope.chartData)) {
                    plot.setData([scope.chartData]);
                    plot.draw();
                }
                setTimeout(update, updateInterval);

            } else {
                clearInterval(updateInterval);

            }

        }

        var $on = false;

现在我导航到任何内容然后返回,我的控制台上出现错误:

  

angular.js:9778 TypeError:scope.firstLoad不是函数       at generatePageGraphs(eval at globalEval ...

范围ID已更改。老兄,我的范围在哪里???

修改 我发现当你把一个函数放在这样的控制器中时:

$scope.myfunc=function(){console.log('This is my func')};

首次加载时,如果你记录你的函数,你会看到它,但如果你从另一个视图导航回来只有函数名称,但里面的代码将是未定义的。 对不起,如果你不明白。我的英语不好

编辑2:

这是我的演示:tam.khonet.com

正如您在控制台选项卡中看到的,范围对象具有文本字段,但我无法访问scope.text。这是未定义的。有人告诉我为什么请

0 个答案:

没有答案