3

HTML:

<div ng-app="my-app" ng-controller="AppController">
    <ng-form name="myform">
        <gtux-el></gtux-el>
    </ng-form>
</div>

JS

var app = angular.module('my-app', [], function () {
})

app.controller('AppController', function ($scope) {
})

app.directive('gtInputMsg', ['$compile', '$interpolate', '$log', function($compile, $interpolate, $log) {
    function link($scope, element, attrs, ctrls) {
        var modelCtrl = ctrls[0], formCtrl = ctrls[1], msgCtrl = ctrls[2];

        element.on('click', function() {
            console.log('gt-input-msg:click', element)
        });
    };

    return {
        require : ['ngModel', '^form', 'gtInputMsg'],
        link : link
    };
}]);

app.directive('gtuxTextfield', ['$compile', '$timeout', '$log', function($compile, $timeout, $log) {
    return {
        restrict : 'E',
        template : '<input type="text" name="field" gt-input-msg ng-model="fieldvalue" />',
        replace : true
    };
}]);

app.directive('gtuxEl', ['$compile', '$timeout', '$log', function($compile, $timeout, $log) {
    function link($scope, $element, attrs, ctrl) {
        //here compile is used because in my use case different elements are used based on some option values. A service provides the template to be used based on a key
        var $cr = $compile('<gtux-textfield></gtux-textfield>')($scope);
        $($cr).appendTo($element);
    }

    return {
        restrict : 'E',
        link : link,
        transclude : true
    };
}]);

エラー

Error: No controller: form
    at Error (<anonymous>)
    at getControllers (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:4278:19)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:4284:24

デモ:フィドル

私が見る限りng-form、階層の最上位に from コントローラーをgtInputMsgディレクティブに提供する要素があります。

これはどのように修正できますか?

4

1 に答える 1

4

<gtux-textfield>まだ追加していないため、DOM のフォームの下に配置せずに要素をコンパイルしています。試す:

var $cr = $('<gtux-textfield></gtux-textfield>').appendTo($element);
$compile($cr)($scope);

あなたのgtuxElリンク機能で。

デモ:フィドル

于 2013-08-21T17:54:58.203 に答える