2014-01-30 4 views
0

Я использую CoffeeScript. Я создал директиву, чтобы деформировать элемент jquery ui datepicker. Я хочу иметь возможность использовать эту директиву в нескольких контроллерах, но я могу заставить ее работать, если я добавлю ее в каждый файл coffeescript для каждого вида, которое я использую, как показано ниже.Использование угловых директив во внешних файлах js

$ = jQuery 

adminApp = angular.module("adminApp", []) 

adminApp.controller "OrganizationCreateCtrl", ($scope) -> 

    $scope.create =() -> 
     $.ajax 'CreateOrganization', 
      type: 'POST' 
      dataType: 'json' 
      data: 
       organizationName: $scope.orgName 

      error: (jqXHR, textStatus, errorThrown) -> 
       $scope.success = '' 
       $scope.isSuccess = false 
       $scope.error = 'Could not generate Organization' 
       $scope.isError = true 
       $scope.$apply() 
      success: (data, textStatus, jqXHR) -> 
       if data.Success is true 
        $scope.success = 'Organization Created Succefully. Organization ID: ' + data.Id 
        $scope.isSuccess = true 
        $scope.isError = false 
        $scope.error = '' 
        $scope.$apply() 
       else 
        $scope.success = '' 
        $scope.isSuccess = false 
        $scope.error = 'Could not generate Organization' 
        $scope.isError = true 
        $scope.$apply() 

adminApp.directive 'datepicker', -> 

    restrict: 'A' 
    require: 'ngModel', 
    link: (scope, element, attrs, ngModelCtrl) -> 
     $ -> 
      element.datepicker 
       dateFormat: "yy-mm-dd" 
       onSelect: (date) -> 
        ngModelCtrl.$setViewValue date 
        scope.$apply() 

Я хочу, чтобы иметь возможность использовать эту директиву, не включая его в каждом контроллере я создаю, но не могу показаться, чтобы заставить его работать.

Я хотел бы создать внешний файл coffeescript только с директивой и использовать его на странице просмотра, к которой относится этот кофейник, но не может заставить его работать.

Опять же, похоже, что это должно быть легко, но ничего, что я устал, не работало, несмотря на то, что вы искали ответ на большой длины.

В нижней строке, как я могу предоставить директиву внешнему файлу coffeescript и использовать его в любом контроллере в своем приложении, вместо того, чтобы добавлять его в каждый файл контроллера, который я создаю.

ответ

2

Посмотрите, как модуляция делается в angular-seed. index.html включает в себя отдельные <script> тегов:

<script src="lib/angular/angular.js"></script> 
<script src="lib/angular/angular-route.js"></script> 
<script src="js/app.js"></script> 
... 
<script src="js/directives.js"></script> 

Каждый файл создает приложение подмодуль с помощью angular.module, например, см directives.js (я перевел на CoffeeScript):

angular.module 'myApp.directives', [] 
    .directive 'appVersion', ['version', (version) -> 
    return (scope, elm, attrs) -> 
     elm.text version 

app.js включен первым, и заявляет свои зависимости от каждого подмодуля:

# Declare app level module which depends on filters, and services 
angular.module 'myApp', [ 
    'ngRoute', 
    'myApp.filters', 
    'myApp.services', 
    'myApp.directives', 
    'myApp.controllers' 
] 
Смежные вопросы