2016-11-01 6 views
0

私はAngularでソートしようとしています。そのテンプレートのコンテナとコントローラに任意のテンプレートを使用して独自のモーダルを作成したいAngularJSのtempale用コントローラを作成して使用します

angular.module('common') 
.service('MyModalService', ['$rootScope', '$compile', 
        function ($rootScope, $compile) { 
    var service = this, 
     scope; 

    // params = { 
    //  templateUrl: string, 
    //  controller: function/array, 
    //  bindings: object, 
    //} 
    service.show = function (params) { 
     scope = $rootScope.$new(true); 
     // what to do with controller?!?!? 
     // how inject dependencies? 
     // how bind bindings to $ctrl? 
     var element = $compile('<div id="my-modal-container"><ng-include src="params.templateUrl"></ng-include></div>')(scope); 
     body.append(element); 
    }; 
}]); 
+0

で解決策を見つけました。 http://stackoverflow.com/a/40299799/4316707この回答を確認してくださいこれはあなたに理解を与えるでしょう –

+0

** $ compile **を使用していますか?あなたはdinamicallyコントロールをDOMに追加しますか?私はその部分を理解していませんでした。 角度コンポーネントを作成しようとしましたか?それをチェックしてください[link](https://docs.angularjs.org/guide/component) –

+0

@ Angular_10 ui-bootstrapが私の望むことをやっています。 $ mdDialogと同様に角をつけています。しかし、私は内部でどのように動作するのか理解したい。 $ mdDialogのSourseコードが私にとっては難しかった –

答えて

0

私はあなただけのモーダルを表示するには、すべてこれを実行する必要があると思う、あなたはモーダルのUI-ブートストラップを使用することができますいけないの$ injector.instantiate()関数

angular.module('common') 
.service('MyModalService', ['$rootScope', '$compile', '$injector', 
         function ($rootScope, $compile, $injector) { 
    var service = this, 
     scope; 

    // params = { 
    //  templateUrl: string, 
    //  controller: function/array, 
    //  locals: object, 
    //} 
    service.show = function (params) { 
     scope = $rootScope.$new(true); 

     // wrap controller function in array 
     if (!params.controller) { 
      params.controller = [new Function]; 
     } else if (!Array.isArray(params.controller)) { 
      params.controller = [params.controller]; 
     } 

     var controllerFunction = params.controller.splice(params.controller.length - 1)[0]; 
     controllerFunction.$inject = params.controller; 
     scope.$ctrl = $injector.instantiate(controllerFunction); 
     angular.merge(scope.$ctrl, params.locals); 
     scope.templateUrl = params.templateUrl; 

     var element = $compile('<div id="my-modal-container"><ng-include src="templateUrl"></ng-include></div>')(scope); 
     body.append(element); 
    }; 
}]); 
関連する問題