欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
項目演化系列

項目演化系列--移動(dòng)端開(kāi)發(fā)

前言

  現在移動(dòng)端的大勢所趨,凡是項目勢必都會(huì )有移動(dòng)端的需求,那么今天就來(lái)講講移動(dòng)端開(kāi)發(fā)吧。

  當今android、ios的開(kāi)發(fā),如果組建原生開(kāi)發(fā)團隊來(lái)開(kāi)發(fā)的話(huà),費用還是很大的,而且現在不少android應用也都是結合html來(lái)進(jìn)行開(kāi)發(fā)的。

  最近阿里也順勢推出了weex,我還沒(méi)去體驗,不過(guò)按照阿里以往的尿性,當初推出kissy時(shí)也是號稱(chēng)各種牛逼烘烘的技術(shù),結果開(kāi)發(fā)的過(guò)程當中卻出現了各種各樣的坑,等到能真的實(shí)際使用上也是好幾年以后的事情了。

  cordova跟weex是比較相似的,從2011年開(kāi)始到現在,經(jīng)過(guò)了這么多年的發(fā)展,api更加穩定,資源比較豐富。

  廢話(huà)就到這里了,開(kāi)始碼代碼吧,文章中使用的是cordova+angularjs。

創(chuàng )建項目

  首先需要安裝nodejs,然后通過(guò)npm安裝cordova,完成了環(huán)境的需求后,就可以通過(guò)如下命令創(chuàng )建一個(gè)cordova項目:

cordova create 項目名

  至于項目?jì)鹊奈募Y構這里就不多介紹了,園內有許多優(yōu)秀的文章有詳細說(shuō)明。

  以上只是稍微簡(jiǎn)介一下,由于cordova的特殊性,使我們可以使用構建web的方式來(lái)構建手機應用,因此接下來(lái)的文章會(huì )介紹如何構建一個(gè)既可以在瀏覽器上進(jìn)行測試,又可以在手機中運行的應用。

示例

  首先看一下例子,代碼如下:

<body ng-app="app" ng-controller="ctrl.index">
   
<div ng-view>
   
</div>
</body>
<script id="init" type="text/ng-template">
   
初始化中,{{ count }}秒后完成
</script>
<script id="main" type="text/ng-template">
   
設備信息: {{ deviceId }}
</script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/
javascript" src="js/angular-route.min.js"></script>
<script type="text/javascript">
   
var app = angular.module('app', ['ngRoute']);

    app
.config([
       
'$routeProvider',
       
function ($routeProvider) {
            $routeProvider
.when('/init', {
                controller
: 'ctrl.init',
                templateUrl
: 'init'
           
}).when('/main', {
                controller
: 'ctrl.main',
                templateUrl
: 'main'
           
});
       
}
   
]);

    app
.controller('ctrl.index', [
       
'$location',
       
function ($location) {
            $location
.path('/init');
       
}
   
]).controller('ctrl.init', [
       
'$interval', '$location', '$scope',
       
function ($interval, $location, $scope) {
            $scope
.count = 5;

            $interval
(function () {
               
if ($scope.count != 1)
                   
return $scope.count--;
               
                $location
.path('/main');
           
}, 1000);
       
}
   
]).controller('ctrl.main', [
       
'$scope',
       
function ($scope) {
            $scope
.deviceId = '未知';
       
}
   
])
</script>

  由于cordova提供的調用Native并不是立即就可使用的,因此需要讓angular的初始化延遲到deviceready事件中進(jìn)行,代碼調整如下:

//移除ng-app
<body ng-controller="ctrl.index">

//angular延遲初始化
<script type="text/javascript">
   
if (true) {
        angular
.bootstrap(document.body, ['app']);
   
}
   
else {
        document
.addEventListener('deviceready', function () {
            angular
.bootstrap(document.body, ['app']);
       
}, false);
   
}
</script>

  至于cordova.js的話(huà),編譯時(shí)需要手動(dòng)將路徑添加上去。

重構

  觀(guān)察以上的代碼,其中有不少內容是可以分離出去的,比如:每個(gè)路由的頁(yè)面html、每個(gè)路由對應的控制器代碼、路由配置代碼等,接下來(lái)我們一步步分離這些代碼,并使用nodejs來(lái)合并這些代碼重新生成當前的index.html。

  首先在項目文件夾下創(chuàng )建一個(gè)src的文件,并創(chuàng )建index.tpl作為模板,用ejs來(lái)生成最終的index.html,部分代碼如下:

<%  if (!DEV) { %>
   
<script type="text/javascript" src="cordova.js"></script>
<%  } %>
    /
/其他代碼略
   
<script type="text/javascript">
<%  if (DEV) { %>
        angular
.bootstrap(document.body, ['app']);
<%
       
}
       
else {
%>
        document
.addEventListener('deviceready', function () {
            angular
.bootstrap(document.body, ['app']);
       
}, false);
<%  } %>
   
</script>

  創(chuàng )建一個(gè)app.js用來(lái)執行生成,代碼如下:

var async = require('async');
var ejs = require('ejs');
var fs = require('fs');
var path = require('path');

global.DEV = false;

async
.waterfall([
   
function (fn) {
        fs
.readFile(
            path
.join(__dirname, 'index.tpl'),
           
'utf8',
            fn
       
);
   
},
   
function (htmlTpl, fn) {
       
var html = ejs.render(htmlTpl);
        fs
.writeFile(
            path
.join(__dirname, '../', 'www', 'index.html'),
            html
,
            fn
       
);
   
}
], function (err) {
    console
.log(err || 'done');
});

  通過(guò)變量DEV來(lái)控制瀏覽器測試或者app html,接下來(lái)將各個(gè)路由html分離到src/html目錄中去,分別為init.html和main.html,只要修改app.js讀取src/html目錄并根據原先的html格式填充到模板中去即可,代碼修改如下:

//index.tpl
//略
<%  views.forEach(function(view) { %>
   
<script id="<%= view.id %>" type="text/ng-template">
       
<%- view.html %>
   
</script>
<%  }); %>
/
/略

//app.js
//略
global.views = [];

var viewDir = path.join(__dirname, 'view');
async
.waterfall([
   
//略,
   
function (fn) {
        fs
.readdir(viewDir, fn);
   
},
   
function (filenames, fn) {
        async
.eachSeries(filenames, function (filename, readFn) {
           
if(path.extname(filename) != '.html')
               
return readFn();
           
            fs
.readFile(
                path
.join(viewDir, filename),
               
'utf8',
               
function (err, html) {
                   
if (err)
                       
return readFn(err);

                   
global.views.push({
                        id
: filename.replace('.html', ''),
                        html
: html
                   
});
                    readFn
();
               
}
           
);
       
}, fn);
   
},
   
//略
], function (err) {
    console
.log(err || 'done');
});

  至于controller的分離跟view是類(lèi)似的,這里就不再提供重復的代碼了。

  而$routeProvider配置的配置是從view直接映射過(guò)來(lái)的,因此只要稍微的修改一下便可以解決了,這里也不重復編碼了。

  接下來(lái)引入cordova的組件,如:device,通過(guò)命令:cordova plugin add cordova-plugin-device來(lái)進(jìn)行安裝,由于使用的時(shí)候是直接用device對象的,因此需要對其包裝一下,代碼放置在src/release中,代碼如下:

app.factory('sys.device', [
   
function () {
       
return {
            uuid
: device.uuid
       
}
   
}
]);

  那么可以創(chuàng )建一份依賴(lài)于瀏覽器環(huán)境的,目錄為src/dev,代碼如下:

app.factory('sys.device', [
   
function () {
       
return {
            uuid
: 'uuid'
       
};
   
}
]);

  修改一下ctrl.main,將device引入,代碼如下:

app.controller('ctrl.main', [
   
'$scope', 'sys.device',
   
function ($scope, device) {
        $scope
.deviceId = device.uuid;
   
}
]);

  在app.js生成index.html的時(shí)候,如果DEV為true則讀取src/dev目錄否則讀取src/release目錄,這樣的話(huà),瀏覽器測試和編譯app運行都沒(méi)問(wèn)題了。

結尾

  許久沒(méi)有寫(xiě)博客了,表達可能不是很清晰,如果有什么問(wèn)題可以留言給我,那么今次的文章就到這里了,謝謝。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
AngularJS自學(xué)之路(一)
《AngularJS》5個(gè)實(shí)例詳解Directive(指令)機制
學(xué)習vue3的新姿勢(vite的使用及源碼流程分析)
ionic2混合app開(kāi)發(fā)系列1
使用Ionic構建Hybrid App
JavaScript學(xué)習筆記 angular.foreach 循環(huán)方法使用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久