这是关于使用Ionic和Angular JS开发移动应用程序的一系列文章。这篇文章涉及更新和删除应用程序上的任何帖子。这也解释了如何通过进行Ajax调用来显示加载图像。在删除帖子时,它会显示一条警告消息,以确认是否删除。这篇文章就是这个。希望你们都能利用Ionic和Angular上的这一系列文章来构建自己的移动应用程序。
数据库设计
要构建用户订阅源系统,您必须创建两个表,例如Users和Feed。
您可以查看我之前的教程,了解如何
创建基于令牌的API系统
。
用户
用户表包含所有用户注册详细信息。
CREATE TABLE 
用户
(
user_id 
int 
AUTO_INCREMENT 
PRIMARY KEY
,
用户名
varchar
(50),
密码
varchar
(300),
名称
varchar
(200),
电子邮件
varchar
(300));
Feed
此表包含用户每日更新。
CREATE TABLE 
feed
(
feed_id 
int 
PRIMARY KEY 
AUTO_INCREMENT
,
feed 
text
,
user_id_fk 
int
,
created 
int
);
下载PHP Restul项目
$ git clone 
https://github.com/srinivastamada/PHP-Slim-Restful.git
PHP Restful
在Github上下载这个项目
PHP RestFul
代码使用Slim框架的简单PHP代码,包括
用于用户插入和删除操作的
新函数
feedUpdate
和
feedDelete
。
<?PHP的
要求
 '的config.php'; 
要求
  'Slim / Slim.php'; 
\ Slim \ Slim ::
 registerAutoloader
(); 
$ app = new \ Slim \ Slim(); 
$ app->
 post
('/ login','
 login
 '); 
/ *用户登录* /
$ app->
 post
('/ signup','
 signup
 '); 
/ *用户注册* /
$ app->
 post
('/ feed','
 feed
 '); 
/ * User Feeds * /
$ app->
 post
('/ feedUpdate','
 feedUpdate
 '); 
/ *用户Feed更新* /
$ app->
 post
('/ feedDelete',' 
feedDelete
 '); 
/ *用户Feed删除* /
$ app->
运行
(); 
//其他函数
函数
 
feedUpdate
(){ 
    $ request = \ Slim \ Slim :: 
getInstance
() - > 
request
(); 
    $ data = json_decode($ request-> getBody()); 
    $ user_id = $ data-> 
user_id
 ; 
    $ token = $ data-> 
token
 ; 
    $ feed = $ data-> 
feed
 ; 
    $ systemToken = apiToken($ USER_ID); 
    
try
 { 
        if($ systemToken == $ token){ 
            $ feedData =''; 
            $ db = getDB(); 
            $ sql =“ 
INSERT INTO feed(feed,created,user_id_fk)VALUES  
                        (
:feed 
,
:created 
,
:user_id 
)
 “; 
            $ stmt = $ db-> 
prepare
($ sql); 
            $ stmt-> 
bindParam
(”feed“,$ feed,
PDO :: PARAM_STR
); 
            $ stmt-> 
bindParam
(”user_id“, $ user_id,
PDO :: PARAM_INT
); 
            $ created = 
time
(); 
            $ stmt-> bindParam(“created”,$ created,  
PDO :: PARAM_INT
); 
            $ stmt-> execute(); 
            $ sql1 =“ 
SELECT * FROM feed WHERE user_id_fk = 
:user_id 
ORDER BY  
                           feed_id DESC LIMIT 1
 “;
            $ stmt1 = $ db-> 
prepare
($ sql1); 
            $ stmt1-> 
bindParam
(“user_id”,$ user_id,  
PDO :: PARAM_INT
); 
            $ stmt1-> 
execute
(); 
            $ feedData = $ stmt1-> 
fetch
(PDO :: FETCH_OBJ); 
            $ db = null; 
            echo'{“feedData”:'。
json_encode
($ feedData)。
'}'; 
        } else { 
            echo'{“error”:{“text”:“No access”}}'; 
        } 
    } 
赶上
(PDOException $ E){ 
        回声'{ “错误”:{ “文”:'。
$ e-> getMessage()。' 
}}'; 
    } 
} 
功能
 
feedDelete
(){ 
    $ request = \ Slim \ Slim :: 
getInstance
() - > 
request
(); 
    $ data = json_decode($ request-> getBody()); 
    $ user_id = $ data-> 
user_id
 ; 
    $ token = $ data-> 
token
 ; 
    $ feed_id = $ data-> 
feed_id
 ; 
    $ systemToken = apiToken($ USER_ID); 
    
try
 { 
        if($ systemToken == $ token){ 
            $ feedData =''; 
            $ db = 
getDB
(); 
            $ sql =“ 
DELETE FROM feed WHERE user_id_fk = 
:user_id 
AND 
                         feed_id = 
:feed_id
 ”;
            $ stmt = $ db-> 
prepare
($ sql); 
            $ stmt-> 
bindParam
(“user_id”,$ user_id,  
PDO :: PARAM_INT
); 
            $ stmt-> 
bindParam
(“feed_id”,$ feed_id,  
PDO :: PARAM_INT
); 
            $ stmt-> 
execute
(); 
            $ db = null; 
            
echo
 '{“success”:{“text”:“Feed deleted”}}'; 
        } else { 
            
echo
 '{“error”:{“text”:“No access”}}'; 
        } 
    } 
赶上
(PDOException $ E){ 
        
回声
 '{ “错误”:{ “文”:'。
$ E-> 
getMessage()。'}}'; 
    } 
} 
?>
home.ts
转到主页组件并包含
feedUpdate
和
feedDelete
函数。
这些功能与源更新和删除API连接以进行数据库更改。
使用
unshift
 javascript内置函数将feedUpdate结果推送到dataSet feed对象。
从
 ' 
@ angular / core
 ' 
导入
 {Component} 
; 
从
  ' 
ionic-angular
 ' 
导入
  {NavController,App,
AlertController
 }  
; 
从
  “ 
../../providers/auth-service
 ” 
导入
  {AuthService}  
; 
从
  “ 
../../providers/common
 ” 
导入
  {Common}  
; 
@ 
Component
({selector:' 
page-home
 ',templateUrl:' 
home.html
 '})
export
 class 
HomePage
 { 
public
 userDetails:any; 
上市
  
  
 resposeData:any; 
  
公共数据集
  :任何; 
  userPostData = { 
    “user_id”:“”,
    “token”:“”,
    “feed”:“”,
    “feed_id”:“” 
  }; 
  
构造函数
(
public
  common:Common,  
public
  alertCtrl:AlertController,  
public
 navCtrl:NavController,  
public
  app:App,  
public
  authService:AuthService){ 
    
const
 data = 
JSON
。
解析
(
localStorage的
。
的getItem
( '用户数据')); 
    this.userDetails = data.userData;
    this.userPostData.user_id = this.userDetails.user_id; 
    this.userPostData.token = this.userDetails.token; 
    这个。
getFeed
(); 
  } 
  
getFeed
(){ 
   
// feed details function
  } 
  
feedUpdate
(){ 
    if(this.userPostData.feed){ 
      this.common。
presentLoading
(); 
      this.authService。
POSTDATA
(this.userPostData “ 
feedUpdate
 ”) 
        。
然后((结果)=> { 
          this.resposeData =结果; 
          如果(this.resposeData.feedData){ 
            。this.common 
closeLoading
();
            this.dataSet。
unshift
(this.resposeData.feedData); 
            this.userPostData.feed =“”; 
          } else { 
            
console
。
log
(“无访问权限”); 
          } 
        ,(err)=> { 
         
//连接失败消息
        }); 
    } 
  } 
  
feedDelete
(FEED_ID,msgIndex){ 
    如果(FEED_ID> 0){ 
      让警报= this.alertCtrl。
创建
({ 
          title:'删除Feed',
          消息:' 
你想买这个Feed?
 ',
          按钮:[ 
            { 
              text:' 
取消
',
              role:'cancel',
              handler :()=> { 
                
console
。
log
('Cancel clicked'); 
              } 
            ,{ 
              text:' 
Delete
 ',
              handler:()=> { 
                this.userPostData.feed_id = feed_id; 
                this.authService。
POSTDATA
(this.userPostData “ 
feedDelete
 ”) 
                  。
然后((结果)=> { 
                    this.resposeData =结果; 
                    如果(this.resposeData.success){ 
                      。this.dataSet 
拼接
(msgIndex,1);
                    } else { 
                      
console
。
log
(“无访问权限”); 
                    } 
                  ,(err)=> { 
                   
//连接失败消息
                  }); 
              } 
            } 
          ] 
        }); 
      alert.present(); 
    } 
  } 
}
对于使用Ionic警报控制器实现的删除功能。
创建预加载提供
程序使用Ionic generate命令创建新提供程序。
如果这不起作用,请按照我以前的文章。
$ 
ionic 
生成
提供者
常见
commont.ts
导入的离子加载控制器,用于实现API调用的预加载功能。
这是最常用的,因此我们将其作为可注射的提供者创建。
从
 ' 
@ angular / core
 ' 
导入
  {Injectable} 
; 
从
  ' 
ionic-angular
 ' 
导入
  {LoadingController}  
; 
@ 
注射
()
出口
类
常见
 { 
      公共
装载机:任; 
      构造函数
(
public
  loadingCtrl:LoadingController){ 
         console
。
log
('Hello Common Provider'); 
      } 
      presentLoading
(){ 
         this.loader = this.loadingCtrl。
create
({content:“Please wait ...”})
         this.loader.present(); 
      } 
closeLoading
(){ 
        this.loader。
解雇
(); 
      } 
}
     
app.module.ts
在应用程序模块中导入新插件。
现在转到
src / app / app.module.ts
并导入
Common
 for API预加载。
从
 ' 
@ angular / core
 ' 
导入
 {NgModule,ErrorHandler} 
; 
从
  ' 
@ angular / platform-browser
 ' 
导入
  {BrowserModule}  
; 
从
  ' 
@ angular / http
 ' 
导入
  {HttpModule}  
; 
从
  ' 
ionic-angular
 ' 
导入
  {IonicApp,IonicModule,IonicErrorHandler}  
; 
从
  ' 
./app.component
 ' 
导入
  {MyApp}  
; 
从
  ' 
../providers/auth-service
 ' 
导入
  {AuthService}  
; 
从中
导入
 {SplitPane} 
 ' 
../providers/split-pane
 '; 
从
  ' 
../providers/common
 ' 
导入
  {Common}  
; 
从
 ' 
../pages/welcome/welcome 
' 
导入
 {Welcome}  
; 
从
 ' 
../pages/login/login 
' 
导入
 {登录}  
; 
从
 ' 
../pages/signup/signup 
' 
导入
 {注册}  
; 
从
  ' 
../pages/about/about
 ' 
导入
  {AboutPage}  
; 
从
  ' 
../pages/contact/contact
 ' 
导入
  {ContactPage}  
; 
进口
 {HomePage}  
来自
  ' 
../pages/home/home
 '; 
从
  ' 
../pages/tabs/tabs
 ' 
导入
  {TabsPage}  
; 
从
  ' 
@ ionic-native / status-bar
 ' 
导入
  {StatusBar}  
; 
从
  ' 
@ ionic-native / splash-screen
 ' 
导入
  {SplashScreen}  
; 
从
  ' 
angular-linky
 ' 
导入
 {LinkyModule}  
; 
从
  ' 
angular2-moment
 ' 
导入
  {MomentModule}  
; 
@NgModule
({ 
  声明:[ 
    MyApp,
    AboutPage,
    ContactPage,
    HomePage,
    Welcome,
    Login,
    Signup,
    TabsPage 
  ],
  
import
:[ 
    BrowserModule,HttpModule,LinkyModule,MomentModule,
    IonicModule.forRoot(MyApp)
  ],
  
bootstrap
:[IonicApp],
  
entryComponents
:[ 
    MyApp,
    AboutPage,
    ContactPage,
    HomePage ,
    欢迎,
    登录,
    注册,
    TabsPage 
  ],
  
提供商
:[ 
    StatusBar,
    SplashScreen,AuthService,SplitPane,
Common
,
    {provide:ErrorHandler,useClass:IonicErrorHandler} 
  ] 
})
export
 class 
AppModule
 {}
构建iOS应用程序
按照执行Xcode构建的命令,观看视频教程,您将了解更多。
$ 
cordova
添加
平台
 
ios
$ 
ionic
 build 
ios
构建Android应用程序
使用Android SDK打开Android构建>
$  
cordova
  添加  
平台
 
android
$  
ionic
  build 
android