angular:关于一个函数的结果为另一个函数的参数的解决方案

场景一:第一个函数参数来源于URL,第一个函数的结果,为第二个函数的点击事件的参数。用到知识点:$http  $compile  ng-click() $location


啥都不说,代码先行:

html:

<body ng-app="myapp" >
    <main  ng-controller="myctrl">
        <div id="wipper" >
    <div id="videoMsg" >
    <div id="videoTitle">{{detail.wiki.title}}</div>
    <div id="minicontent">简介<img src="./images/detail/news_arrows.png" alt=""></div>
    <div class = "mclear"></div>
    <div id="msg">{{detail.wiki.desc}}</div>

    </div>
  <div id="channelList"class="swiper-container">
    </div>
    <div id="episode" ng-control = "channellistctrl" >
    <ul >
    <li ng-repeat = "backvideo in mvideolist.programs track by $index" >{{backvideo.title}}    </li>
    </ul>
    </div>

    </div>
        
        </main>


<script src = "./js/detail.js"></script>
    </body>


js代码:


var app=angular.module("myapp",[]);
        app.config(['$locationProvider', function($locationProvider) {  
         // $locationProvider.html5Mode(true);  
         // 屏蔽掉angular 的默认URL中的#号
         $locationProvider.html5Mode({
          enabled: true,
          requireBase: false
        });
        }]);
        app.controller('myctrl', function($scope, $location,$http,$compile,$window) {

                          console.log($location.search().wikiid);

           var channelfirst;

 说明:marg 获取从url中传递过来的参数,形式如:/7/detail.html?wikiid=4d007e762f2a241bd70010a0

           var marg = $location.search().wikiid;
        说明:此函数为第二个函数,因为第一个函数请求成功拿到数据后,就要立即调用,所以我将这个函数的位置跳到一地个函数的前面了。
$scope.videolist = function(arg){
console.log("------------------------------------------");

console.log("点击事件起效");

                                说明:arg 参数需要传进视频频道列表的中,需要获取视频列表的那个频道Id.

var channelId = arg;
console.log("channelId参数事件起效:"+ channelId);
var mvideojson = {
    "action": "XXX",
    "param": {
        "page": 1,
        "pagesize": 10,
        "wikiId": marg,
        "channelId": channelId,
        "sort": -1
    }
};

$http({
method:'post',
url:"/Epg",
data:mvideojson,
}).then(function(data){
console.log("视频列表");
$scope.mvideolist = data.data;
console.log("视频列表:" + angular.toJson($scope.mvideolist));
}).catch(function(){
consoloe.log("视频列表数据");
});
}









var mjsondata = {"action": "XXX",
    
    "param": {
        "wikiId": marg
    }
};
console.log("marg:"+marg);

console.log("mjsondata:"+angular.toJson(mjsondata));

说明:直接用$http 可以实现页面一打开,请求自动执行的效果,如果用函数包裹,则需要进行手动调用,才能实现自动执行。

$http({
method:'post',
url:"/Epg",
data:mjsondata,
}).then(function(data){
console.log("详细信息请求发送成功");
$scope.detail = data.data;
channelfirst = $scope.detail.backChannelList[0].channelId;
$scope.videolist(channelfirst);
}).catch(function(){
console.log("视频简介数据");
});
// TODO 动态生成html中 ng-click无效 解决方法 $compile 是传进来的 
//下边这句话就是要写入页面中的内容,首先把你写入的内容赋值给html 
var html="<ul class='swiper-wrapper'><li class='swiper-slide' ng-repeat = 'mchannellist in detail.backChannelList track by $index' ng-click = 'videolist(mchannellist.channelId)'>{{mchannellist.channelName}}</li></ul>";
//用$compile进行编译 
var $html = $compile(html)($scope); 
  
//添加到页面中,或者你任何想添加的位置。
  
$("#channelList").append($html); 

});

猜你喜欢

转载自blog.csdn.net/weixin_40098371/article/details/80563951