AngularJS在访问其他页面时运行函数
我只是想知道,如果用户转到这个页面,我想运行一个函数,那么AngularJS的最佳实践是什么 比如说。我有这个网址 它将显示带有该ID的帖子。因此,我在页面上显示它的方式是,我使用ng init=“function()”,因此每次用户进入此页面时,它都会首先初始化函数,也就是说,该函数调用后端并返回我需要的数据 所以我的问题是,这是最好的方法/实践吗?使用ng init调用函数,然后向视图显示数据 **更新 谢谢你的回答!顺便说一句,我使用一个控制器来完成这个任务,我的功能就在这个控制器上。我将把我的代码粘贴到这里。。 这里的代码显示用户从数据库检索到的消息 Messages.htmAngularJS在访问其他页面时运行函数,angularjs,Angularjs,我只是想知道,如果用户转到这个页面,我想运行一个函数,那么AngularJS的最佳实践是什么 比如说。我有这个网址 它将显示带有该ID的帖子。因此,我在页面上显示它的方式是,我使用ng init=“function()”,因此每次用户进入此页面时,它都会首先初始化函数,也就是说,该函数调用后端并返回我需要的数据 所以我的问题是,这是最好的方法/实践吗?使用ng init调用函数,然后向视图显示数据 **更新 谢谢你的回答!顺便说一句,我使用一个控制器来完成这个任务,我的功能就在这个控制器上。我将
<div ng-controller="MessageController as mc" ng-init="messageGet()" class="container" style="height: 90vh">
<h1>Messages</h1>
<div class="row">
<div class="col-md-12">
<ul class="media-list" ng-repeat="messages in theMessages">
<a href="#">
<li class="media card-1">
<div class="media-left">
<a href="#">
<img class="media-object" src="/public/images/matt.jpg" alt="avatar">
</a>
</div>
<div class="media-body">
<h5 class="media-heading" ng-if="messages.user1 !== username">{{messages.user1}}</h5>
<h5 class="media-heading" ng-if="messages.user2 !== username">{{messages.user2}}</h5>
<strong>Topic: </strong>{{messages.postname}}
<h5><strong>{{messages.recentmessage.sender}}</strong>: {{messages.recentmessage.message}} </h5>
<div>
<a href="/messages/{{messages._id}}" class="btn btn-info" style="margin-bottom: 10px">View message</a>
</div>
</div>
</li>
</a>
</ul>
</div>
MessageService
var app = angular.module('main');
app.service('MessageService', ['$http', '$localStorage', function($http, $localStorage){
var vm = this;
vm.getMessages = function(){
var getmessage = {
method: 'POST',
url: '/api/getmessages',
dataType: 'json',
contentType: 'application/json',
data: {
userid: $localStorage.userid
}
};
return $http(getmessage)
.then(function(response){
$localStorage.messages = response.data.info;
return true;
});
};
如您所见,当我转到urllocalhost:3000/messages
时,它将加载messages.htm模板,然后我将运行函数“messageGet()”,因为我需要从数据库获取消息,然后将其显示在我的视图上。如果我不使用ng init,那么当用户访问此特定url时,我将如何运行该函数
第二次更新
var app = angular.module('main');
app.service('MessageService', ['$http', '$localStorage', function($http, $localStorage){
var vm = this;
vm.getMessages = function(){
var getmessage = {
method: 'POST',
url: '/api/getmessages',
dataType: 'json',
contentType: 'application/json',
data: {
userid: $localStorage.userid
}
};
return $http(getmessage)
.then(function(response){
$localStorage.messages = response.data.info;
return true;
});
};
因此,我试图摆脱ng init函数,我使用了一个立即调用的函数
消息控制器
(function messageGet (){
console.log('Messaged run!');
var result = MessageService.getMessages()
.then(function(result){
$scope.theMessages = $localStorage.messages;
$scope.username= $localStorage.username;
});
})();
因此,每次加载Message.htm时,都会运行此函数
我的问题是,这样行吗?而不是ng init
谢谢大家! im使用ng init=“function()”
以便用户每次进入此页面时都会首先初始化函数
不建议使用ng init
。为此使用控制器
从文档中:
恩吉尼特
此指令可能被滥用,以便在模板中添加不必要的逻辑量。ngInit
只有少数几种合适的用法,例如用于对ngRepeat
的特殊属性进行别名,如[]所示;以及通过服务器端脚本注入数据。除了这几种情况之外,还应该使用而不是ngInit
来初始化作用域上的值
正如@georgeawg所述,您应该使用指定的控制器进行此类操作。
如果您使用的是angular version>=1.5,则应使用控制器属性$onInit。
了解更多有关角度组件及其生命周期的信息 如果您使用的是旧版本,则可以执行以下操作:
function MyController() {
function init() {
//enter init code here
}
init();
}
您可以阅读更多信息。最佳做法是使用路由器模块。ng init被推荐用于无任何用途,它只会导致糟糕的代码和其他任何东西。messageGet函数是控制器的一部分吗?是的messageGet函数在MessageController中谢谢!我更新了我的问题。我上传了我的代码,我初始化的函数驻留在控制器上。