所以我正在为一个预先存在的 Rails 应用程序编写一个 Angular 前端。我知道在将后端转换为通过 JSON 将 REST Api 直接提供给 ngResource 之前,使用 $q 充其量只是一个中间步骤,但不幸的是,目前在各种 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 正在页面上正确显示,并且日期选择器正在成功实例化。返回的 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 过去直接存在于资产管道中,并且过去运行得很好。