在工厂中设置数据并将其绑定到控制器

时间:2014-08-08 16:19:26

标签: javascript angularjs

目标:在控制器中显示错误(errorCtrl),可以在多个其他控制器中设置(即modulCtrl)

我通过设置服务(ErrorConsole)来尝试这个。

logViewApp.service('ErrorConsole', function () {
    this.errorMsg = 'no error';
    return {
        error: this.error,
        setError: function(data){
            this.error = data;
        }
    }
});

很容易从服务中检索数据

JS:

logViewApp.controller('errorConsoleCtrl', function ($scope, ErrorConsole) {
    $scope.error = ErrorConsole.errorMsg;
});

HTML:

<nav class="navbar navbar-default navbar-fixed-bottom" role="navigation" ng-controller="errorConsoleCtrl">
        <div class="container-fluid text-danger">
            ERROR:{{msg}}<br>
            <span >Query:{{query}}</span><br>
            test:{{testdata}}

        </div>
    </nav>

但我可以在工厂设置数据,但它不会显示在errorConsoleCtrl

logViewApp.controller('modulCtrl', function( $scope, $http, $routeParams, ErrorConsole ){
    $scope.moduleName = $routeParams.modulId;

    var postData = {
        task: 'loadLogsByModul',
        modul: moduleName,
        limit: 100
    }

    $http.post('data/log.php', postData).success(function (ret) {
        if (!ret.error) {
              // ...do stuff
        }
        else {
            ErrorConsole.setError('fatal error');
            console.log( ErrorConsole );
        }
    });

});

第一个问题:这是正确的方法吗? 第二个问题:为什么这不起作用?是一个依赖注入的工厂仍然是控制器范围的主题?

1 个答案:

答案 0 :(得分:1)

service配方像构造函数一样被调用,因此没有必要返回。该服务应写为

logViewApp.service('ErrorConsole', function () {
    this.errorMsg = 'no error';
    this.setError: function(data){
            this.errorMsg = data;
        }
    }
});
相关问题