2017-12-29 31 views
-1

一部のクライアントのためにrequireステートメントで作成されたコンポーネントに$ログインを挿入しようとしました。

var App = require('./app/containers/App'); 
var Header = require('./app/components/Header'); 
require('angular-ui-router'); 
var routesConfig = require('./routes'); 

import './index.css'; 
angular 
    .module('app', ['ui.router']) 
    .config(routesConfig) 
    .controller(App.App, ['$log']) 
    .service('todoService', todos.TodoService) 
    .component('app', App) 
    .component('headerComponent', Header); 

ヘッダのコードは、Appのコードは、私は、コントローラへのアクセス権を持っているとして、私はAppの依存関係として$ログを注入することができ

module.exports = { 
    template: require('./App.html'), 
    controller: App 
}; 

function App($log) { 

    this.log = $log; 
    $log.error('Hello from App'); 
} 

ある

module.exports = { 
    template: require('./Header.html'), 
    controller: Header, 
    bindings: { 
    todos: '=' 
    } 
}; 

/** @ngInject */ 
function Header(todoService) { 
    this.todoService = todoService; 
} 

Header.prototype = { 
    handleSave: function (text) { 
    if (text.length !== 0) { 
     this.todos = this.todoService.addTodo(text, this.todos); 
    } 
    } 
}; 


です。しかし、Headerはコントローラ機能へのアクセスを許可していないようなrequireによって作成されるため、Headerで同じタスクを実行するのは難しいです。

私が知りたいことは、これには道があるのですか?
私はheader.jsの可能なjavascript関数から情報を記録する方法を見つけようとしています。私は$を使用以外の選択肢を見てきました

は、クライアント側のアプリケーションに情報をログに記録するログ

私のソリューションは、これまで必要とブロックで記述されたコードの中で言ってきました。

var ing = angular.injector(['ng']); 
    this.$log = ing.get('$log'); 

    this.$log.error('I am a message'); 

私は、これは物事の間違った方法だと思う、それは私が欲しいものを私に与え、私はそれがいくつかの点で壊れることを期待しています。私は$ logへのアクセス権を持っていることがデバッグにのみ役立つことがわかります。私の生産コードに必要なものではありません。

+0

「angular.injector」の使用はよくある間違いです。なぜなら、動作すると予想され、いくつかの設計上の問題を示しているため動作しないからです。質問には「App」と「Header」は含まれていません。関連性がありますが、実行しようとしていることはそこで実行する必要があります。 – estus

+2

は '.controller(App.App、['$ log'])'を間違った方法で使用しているようです。 '.controller( 'App'、['$ log'、App.App])' – Andy

+0

コンポーネントでは、サービスはコンポーネントのコントローラの構築機能に注入可能です。詳細については、[AngularJS Developer Guide - Dependency Injection](https://docs.angularjs.org/guide/di)を参照してください。 – georgeawg

答えて

0

私がしようとしていたのは、$ log角ラッパーにアクセスすることでした。私がしなければならなかったことは、$ logを引数リストに追加することでした。

function Header(todoService,$log) { 
    $log.log('I am a log message'); 
    this.todoService = todoService; 
} 

私はちょうどAngular 1.5初心者ですが、私はあなたが正しい応答を得るために$ logを注入しなければならないと考えていました。ちょうどそれはkopのビットであるように思わせる。