场景一:第一个函数参数来源于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.
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);
});