そのため、既存の Rails アプリケーションの Angular フロントエンドを作成しています。$q を使用することは、バックエンドを変換して JSON を介して REST Api を直接 ngResource に提供する前の、せいぜい中間ステップであることを理解していますが、残念ながら、当分の間、さまざまな Ruby の場所に存在するロジックが多すぎて、すべてを簡単に .純粋な Angular 形式。
問題は、返されたパーシャルの ng 属性を正しくインスタンス化して処理するにはどうすればよいかということです。以下は、コードのサニタイズ バージョンです。
Company.Controller.TypeAccordionController = (scope, http, element, q, typeJQueryService) ->
scope.getTheDamnType = (id) ->
typeJQueryService.multipart(id).then (response)->
angular.element('.datePicker').datepicker()
Company.Controller.TypeAccordionController.$inject = ['$scope', '$http', '$element', '$q','typeJQuery']
返された HAML がページに正しく表示され、datepicker が正常にインスタンス化されています。返された HAML には以下が含まれます。
= ff.check_box :completed, :class => "field sale_#{sale.price}", :disabled => sale.completed?
以下のサービスを通じて:
Company.MyModule.factory 'TypeJQuery', ($q, $rootScope) ->
multipart: (element) ->
deferred = $q.defer()
$.get "..." + element, (data) ->
$rootScope.$apply ->
deferred.resolve data
deferred.promise
次の Javascript がディレクティブで定義されている場合:
Company.Directive.DatePickerDirective = ->
restrict: 'C'
controller: Company.Controller.TypeAccordionController
link: (scope, element, attrs) ->
$(".type-form input[type='checkbox']").click (e)->
$checkbox = $(e.target)
$date = $checkbox.parent('.checkbox').siblings(".target").find('.actually_completed_on_date')
if $checkbox.is(':checked')
if $date.val() == undefined || $date.val().length == 0
$date.val($.datepicker.formatDate("dd-M-yy", new Date()))
else
$date.val("")
Company.MyModule.directive 'datePicker', Company.Directive.DatePickerDirective
これを Angular でラップする前は、javascript がアセット パイプラインに直接存在し、正常に実行されていたことに注意してください。