$http 这个服务就是在 Angular 上使用 Ajax 功能的方法。使用这个服务提供的功能,我们可以向服务端发出 http 的请求, 比如去获取一些信息,或者发送一些信息给服务端。
在 app.js 这个文件里面,现在有一个空白的控制器,叫 ShowController ... 下面,为了简单的演示一下 ... 我们可以直接在这个控制器上去使用 $http 这个服务 ... 如果你觉得是可以重复使用的功能,可以把它们定义成一个服务,然后再注入到这个控制器里来用。
先把 $http 注入到这个控制器上 ... 另外还有 $scope
myApp.controller('ShowController', function ($http, $scope) {
});
然后在这个控制器里,可以先在 $scope 上面,定义一个方法 ... 这个方法可以叫做 getShows ... 用这个方法去获取到电视剧的内容。
$scope.getShows = function () {};
在这个方法里,我们可以使用 $http 的 get 这个方法,去到服务器得到一些东西 ... 在 app 这个目录的下面,我手工的创建一个 json 格式的文件 ... 就是这个 data.json ... 一般这个数据是服务端动态提供的,不过为了演示,我们可以用 $http 的 get 方法,直接去请求这个 data.json ...
把这个请求的地址交给 get 方法 ... 因为 $http 这个服务用到了 $q 服务,所以它会返回一个 promise ... 这样我们就可以使用 promise 的 then 方法,去处理成功获取到数据以后要做的事,还有出现错误的时候要做的事 ..
使用 then 的好处就是,我们可以在这个 then 的后面继续去使用 then ... then 字面上的意思就是然后,然后怎么样 ... 比如你可能需要先用 get 得到一些数据,然后根据这些数据继续去做处理 ...
我们可以先去设计一下这个 then 里面,决定要做的事情,也就是获取数据成功以后要做的事情 ... 用一个匿名函数作为它的第一个参数 ... 这个函数支持一个参数,可以叫它 data ... 发出的请求,返回来的东西,会包含在这里面。
这个函数要做的事就是,把得到的数据放到 $scope 上面,这样我们就可以在视图上面,去使用服务端返回来的这些数据了 ... $scope.shows 等于 data.data .. 因为返回来的数据里面,会包含数据本身,状态,页头信息等等,真正的数据包含在 data 这个属性里面。
接着再去设计一下 then 的第二个参数,就是失败的时候要干的事儿 .. 同样是一个函数 ... 它也可以接受一个参数 ... 这里可以叫它 error ... 请求出现错误,我们就在控制台上输出错误的信息 ... 用一个 $log.log ... 输出 error 里面的 data 这个属性里的值,也就是直接输出错误的具体的信息。这里想要使用 $log ,你需要把它作为这个控制器的一个依赖注入进来 ...
保存 ... 再回到 index.html ... 我们先在一个元素上使用 ShowController 这个控制器 ... 然后再添加一个按钮 ... 按钮上的文字是 显示 ... 上面加上一个 ng-click .. 点击这个按钮,就去执行 getShows 这个方法 ...
在它的下面,再用一个 ng-repeat ,去循环的输出获取到的电视剧的列表 ... 先用一个 ul 标签 ... 然后要循环的是 li 标签 ... 在上面用一个 ng-repeat ... show in shows ... 在输出的内容是 title 这个属性里的东西 ...
保存 ... 打开浏览器 ... 在页面上会有一个 显示 的按钮 ... 点一下这个按钮 ... 这样会去执行 ShowController 里面的 getShows 这个方法,在这个方法里面,我们用到了 $http 服务的 get 方法,到指定的地方去请求一些数据,然后我们把这些数据交给了 $scope 上面的 shows 里面。 得到这个数据以后,在 index.html 里面,使用 ng-repeat 循环的输出电视剧的标题 ...