0

Je suis nouveau dans AngularJS et un peu confus avec les choses directives. Dans le code ci-dessous, j'ai besoin de créer un champ de saisie avec une directive qui est dans un module d'externalisation et de me concentrer dessus avec ma directive personnalisée.
Attention, je ne peux pas changer le module sous-traiter ...Comment déclencher une directive après un module hors de mon module principal dans angularjs

myHtml.html

<body ng-app="main" ng-controller="myCtrl"> 
    <my-field></my-field> 
</body> 

Outsource.js

var app2 = angular.module('pain', []); 
app2.directive('myField', [function() { 
    return { 
     scope.f = 'focus-me'; 
    }, 
    template: 'name: <input type="text" class="{{f}}"/>' + 
     '<br/>' + 
     'input class is: \"{{f}}\"' 
} 
}]); 

myApp.js

var app1 = angular.module('main', ['pain']); 
app1.controller('myCtrl', ['$scope', function($scope) { 
    $scope.state = true; 
}]); 
app1.directive('focusMe', ['$timeout', '$parse', function($timeout, $parse) { 
    return { 
     restrict: 'C', 
     link: function(scope, element) { 
      scope.$watch(scope.state, function() { 
       console.log('value=', scope.state); 
       if (scope.state === true) { 
        $timeout(function() { 
         element[0].focus(); 
        }, 20); 
       } 
      }); 
     } 
    }; 
}]); 

Fiddle
fiddler

Il serait ok avec quelque chose comme le code ci-dessous, mais je ne peux pas changer le code de sous-traiter.
Il fonctionne
fiddler

Répondre

0

vous defintely pour fixer le code dans Outsource.js pour ce que vous voulez faire pour travailler. Il y a quelques problèmes avec ça. Voir mon commentaire pour explications:

Outsource.js - comme il est dans votre question

var app2 = angular.module('pain', []); 
app2.directive('myField', [function() { 
    return { 
     /* directive scope needs to be added as a parameter to the angular directive link function before you can use it. */ 
     scope.f = 'focus-me'; 
    }, 
    // Your template property should be in your return object 
template: 'name: <input type="text" class="{{f}}"/>' + 
     '<br/>' + 
     'input class is: \"{{f}}\"' 
} 
}]); 

Outsource.js - ce qu'elle devrait être

var app2 = angular.module('pain', []); 

app2.directive('myField', function() { 
    return { 
    restrict: 'E', 
    template: 'name: <input type="text" class="{{f}}"/>'+ 
      '<br/>'+ 
      'input class is: \"{{f}}\"', 
    link: function (scope) { 
      scope.f='focus-me'; 
    }, 

    controller: [function ($scope) { 
     // Do Awesome stuff in/with $scope here 
    }] 
    }; 
}); 

donc dire à la personne qui a écrit le code dans Outsource.js pour le réparer sinon vous ne pouvez pas réaliser ce que vous voulez réaliser.