Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS在访问其他页面时运行函数_Angularjs - Fatal编程技术网

AngularJS在访问其他页面时运行函数

AngularJS在访问其他页面时运行函数,angularjs,Angularjs,我只是想知道,如果用户转到这个页面,我想运行一个函数,那么AngularJS的最佳实践是什么 比如说。我有这个网址 它将显示带有该ID的帖子。因此,我在页面上显示它的方式是,我使用ng init=“function()”,因此每次用户进入此页面时,它都会首先初始化函数,也就是说,该函数调用后端并返回我需要的数据 所以我的问题是,这是最好的方法/实践吗?使用ng init调用函数,然后向视图显示数据 **更新 谢谢你的回答!顺便说一句,我使用一个控制器来完成这个任务,我的功能就在这个控制器上。我将

我只是想知道,如果用户转到这个页面,我想运行一个函数,那么AngularJS的最佳实践是什么

比如说。我有这个网址 它将显示带有该ID的帖子。因此,我在页面上显示它的方式是,我使用ng init=“function()”,因此每次用户进入此页面时,它都会首先初始化函数,也就是说,该函数调用后端并返回我需要的数据

所以我的问题是,这是最好的方法/实践吗?使用ng init调用函数,然后向视图显示数据

**更新

谢谢你的回答!顺便说一句,我使用一个控制器来完成这个任务,我的功能就在这个控制器上。我将把我的代码粘贴到这里。。 这里的代码显示用户从数据库检索到的消息

Messages.htm

<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;
            });
    };
如您所见,当我转到url
localhost: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中谢谢!我更新了我的问题。我上传了我的代码,我初始化的函数驻留在控制器上。