※$location、$http、$timeout、$interval
<html> <script type="text/javascript" src="angular.js"></script> <body ng-app='xxx'> <div ng-controller='ooo'> <p>{{myUrl}}</p> <p>{{myHttp}}</p> <p>{{myURL}}</p> <p>{{myTimeout}}</p> <p>{{myInterval}}</p> </div> </body> </html> <script> var app = angular.module('xxx', []); app.controller('ooo', function($scope, $location, $http, $timeout, $interval) { $scope.myUrl = $location.absUrl(); $http.get("http://localhost:8080/TestServletXXX/xxx.jsp").then(function (response) { $scope.myHttp = response.data; $scope.myURL = response.config.url; }); $timeout(function () { $scope.myTimeout = "我佇這,你看啥貨?"; }, 2000); $interval(function () { $scope.myInterval = new Date().toLocaleTimeString(); }, 1000); }); </script>
※$location:類似window.location
※$http:連到已啟動的伺服器,但Chrome會有同源策略的問題,可參考這篇
※$timeout:js的window.timeout,過幾毫秒做什麼事
※$interval:js的window.interval,每過幾毫秒做什麼事
※以上可以加debugger看還有什麼可以「.」的
※service
<html> <script type="text/javascript" src="angular.js"></script> <body ng-app='xxx'> <div ng-controller='ooo'> <p>{{self}}</p> </div> </body> </html> <script> var app = angular.module('xxx', []); app.controller('ooo', function($scope, zzz) { $scope.self = zzz.yyyFun(100); }); app.service('zzz', function() { this.yyyFun = function (x) { return x + x; } }); </script>
※自定 service 的功能,也就是定義controller裡可以放的service,此例是zzz
※filter 抓 service 的方法
<html> <script type="text/javascript" src="angular.js"></script> <body ng-app='xxx'> <ul ng-controller='ooo'> <li ng-repeat="a in intArr">{{a | myFilter}}</li> </ul> </body> </html> <script> var app = angular.module('xxx', []); app.controller('ooo', ($scope) => { $scope.intArr = [73, 108, 49]; }); app.filter('myFilter',['zzz', (f) => { // 這裡的zzz對應到service,使用裡面的方法 return (x) => { return f.yyy(x); }; }]); app.service('zzz', function() { this.yyy = (x) => { return String.fromCharCode(x); } }); </script>
※zzz 對應好即可
※Servlet 回傳 JSON
@WebServlet(urlPatterns = { "/xxx" }) public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String json = "{\"A\":\"1\",\"B\":2,\"C\":3.3}"; System.out.println("json=" + json); // JSONObject json = new JSONObject(); // json.put("A", "1"); // json.put("B", 2); // json.put("C", 3.3); // System.out.println("json=" + json.toString()); resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); PrintWriter out = resp.getWriter(); out.write(json); out.flush(); out.close(); } }
※一定要用「"」,單引號我試的結果,前端會跑到fail,所以最好是用註解這一類的工具,才不會看到目睭拖窗
※JSON回傳「"xxx":["A":1,"B":2,"C":3]」,試的結果也是會跑到fail,很奇怪
※不使用setContentType也是可以的
※前端
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="angular.min.js"></script>
<script> var app = angular.module('xxx', []); app.controller('ooo', function($scope, $http) { $http({ method : 'GET', url : 'xxx' }).then(function successCallback(resp) { $scope.a = resp.data.A; $scope.b = resp.data.B; $scope.c = resp.data.C; }, function errorCallback(resp) { alert('fail'); }); }); </script> </head> <body ng-app='xxx'> <div ng-controller='ooo'> <p>{{a}}</p> <p>{{b}}</p> <p>{{c}}</p> </div> </body> </html>
※一載入頁面就呼叫了
※resp.data 是固定的,而後面如果是JSON還可以繼續「.」
沒有留言:
張貼留言