javascript - angular 指令中后台请求的数据无法传递到指令中何解?
大家讲道理
大家讲道理 2017-04-10 15:27:14
[JavaScript讨论组]

页面加载后指令里边这个musicList没有值,controller里边写假值的时候正常,用ajax请求数据后就不正常了

假数据的demo:pagination

  • {{music.name}} - {{music.singer}}

    {{music.content}}

后台请求:

music.controller('HomeCtrl', ['$scope', 'audioService', 'homeService', function ($scope, audioService, homeService){

    homeService.getMusicList().then(function (data){
        $scope.musicList = data;
    });

    homeService.getRankFour().then(function (data){
        $scope.musicRank = data;
    });

    $scope.playMusic = function (){
        audioService.playMusic();
    }

}]);

music.factory('homeService', ['$rootScope', '$http', function ($rootScope, $http){

    var service = {};

    service.getMusicList = function (){
        var url = $rootScope.apiHost + '/musicmood';
        return $http.get(url).then(function (resp){
            return resp.data;
        });
    };

    service.getRankFour = function (){
        var url = $rootScope.apiHost + '/rankfour';
        return $http.get(url).then(function (resp){
            return resp.data;
        });
    };

    return service;
}]);

指令如下:

music.directive('pagination', ['$interval', function ($interval){
    return {
        restrict: 'AE',
        replace: true,
        template: '\


\ 首页 \ 上一页\ ... \ {{num}} \ ... \ 下一页\ 尾页 \

', link:function (scope, element, attrs){ scope.currentPage = attrs.currentpage; scope.itemsPerPage = attrs.itemsperpage; scope.itemsList = attrs.itemslist; scope.pageList = attrs.pagelist; // console.log(scope); scope.itemsList = scope.$eval(scope.itemsList); scope.pageCount = function () { if (scope.itemsList) { return Math.ceil(scope.itemsList.length / scope.itemsPerPage); } else { return 1; } }; scope.total = scope.pageCount(); scope.number = []; for(var i=0; i 0) { scope.currentPage--; } scope.jumpPageList(); }; scope.prevPageDisabled = function () { return scope.currentPage +1 == 1; }; scope.nextPage = function () { if(scope.nextPageDisabled()){ return; } if (scope.currentPage < scope.pageCount()) { scope.currentPage++; } scope.jumpPageList(); }; scope.nextPageDisabled = function () { return (scope.currentPage +1) == scope.total; }; } } }]);
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
迷茫

我不太理解你这个写法

scope.itemsList = attrs.itemslist;

scope.itemsList = scope.$eval(scope.itemsList);

不过在指令中 如果你不设置scope的话 默认是继承父类的scope
所以你直接用scope.itemslist就是 html页面中的 itemslist值,而不需要用attr.xx去获取

(1) 一般为了不污染父级的scope 都会设置成

scope{
    xxx:'@xxx',
    xxx:'=xxx',
    xxx:'=&xxx'
}

的形式

(2)使用$broacast 传播事件

黄舟

把 $http 请求的 代码贴下~~

PHP中文网

感觉你应该是加载的问题,数据加载在指令生效之后,所以没有数据,以前遇到过类似的问题,检查一下加载顺序。

PHP中文网

你好,请问 你这个问题解决了吗?我现在也遇到 同样的问题,而且监控失败

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号