2017-12-25 13 views
2

最初にこの質問について多くのものを検索し、いくつかの提案を使用しましたが結果を得ることができませんでした。 私は一つだけのコントローラがあった1つのJSファイル、main.jsを、持っていたし、すべてがうまく動いた:私はドラッグするためのライブラリを追加し、テーブルの列のdragtable.jsをドロップしました異なるファイル内の指令からのAngularJSコール関数

var app = angular.module('monitoringApp', ['ui.bootstrap', 'ngCookies', 'angularCharts','angularUtils.directives.dirPagination','ngLoadScript','ngRoute','dragtable']); 

app.controller('mainController', ['$scope', '$http', '$cookies', '$cookieStore' , '$location', function($scope, $http, $cookies, $cookieStore,$location) { 
//some function which i need to call; 
} 

をし、dragendイベント()関数内私はmain.js

var project = angular.module("dragtable", []); 

project.directive('draggable', function($window, $document) { 
function dragEnd($event) { need to call function inside main.js } 
} 

内のいくつかの関数を呼び出すしたい私はすでに共有サービスを使用しようとしましたが、まだ呼ばれている機能にエラー未定義になっていることに注意してください。

+0

いくつかのコードがあり、何らかのエラーが発生しており、その手助けが必要な場合は、コードを投稿し、エラーを投稿してください。 –

答えて

0

機能を格納するファイルは実際には問題になりません。つまり、directiveは、ウィジェットのようなhtml要素にリンクされるためにディレクティブが主に使用されるため、探しているものとは思わないでしょう。それをMVCモデルスキームのコントローラーと考えてください。これはコーディングの立場からあなたとのやりとりをすることができます。しかし、ディレクティブにアクセスできない場合は、ディレクティブ関数を直接呼び出すことはできません。

サービスはコントローラやその他の場所に注入できるシングルトンオブジェクトです。

project.factory('draggable', function() { 
    function dragEnd($event) { ... } 
    return dragEnd 
}) 

そして、あなたのメインモジュール内部:何をしたい

は、おそらくこれです。ここ

app.controller('mainController', 
    [ 
    '$scope' 
    , '$http' 
    , '$cookies' 
    , '$cookieStore' 
    , '$location' 
    , 'draggable' 
    , function(
     $scope 
    , $http 
    , $cookies 
    , $cookieStore 
    , $location 
    , draggable 
) { 
    //here you can call draggable 
    }] 
) 

あなたはdragEnd別名ドラッグ可能な機能をコントローラに注入されていることがわかります。

var draggable = draggable.bind(someobj) 

それともapplyまたはcall

draggable.call(someobj, event) 
draggable.apply(someobj, [event]) 

でそれを使用する:あなたは、複数のハンドラのためにこの共通の機能を使用したいが、その後、あなたがこのようなオブジェクトに関数をバインドする必要があるかもしれません場合、これは良いですその理由は、呼び出されたときに関数内からthisにアクセスしたいのであれば、実際にそのメソッドをどのように呼び出すかによって期待する内容と異なる場合があります。

あなたの指示に関する1つの注釈...あなたは常に何かを返さなければなりません。あなたの場合、工場を作りましたが、何も返さなかった可能性があります。このため、「未定義」エラーが発生しました。何も返さなければ、ファクトリは実行時にファンクションを作成して削除します。