Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 没有子作用域的自定义ng Include指令-ng消息不起作用_Javascript_Angularjs_Angularjs Directive_Angular Directive_Ng Messages - Fatal编程技术网

Javascript 没有子作用域的自定义ng Include指令-ng消息不起作用

Javascript 没有子作用域的自定义ng Include指令-ng消息不起作用,javascript,angularjs,angularjs-directive,angular-directive,ng-messages,Javascript,Angularjs,Angularjs Directive,Angular Directive,Ng Messages,我编写了一个名为lobInclude的指令,我希望与ngInclude相同,但没有范围: .directive("lobInclude", ["$templateRequest", "$compile", function($templateRequest, $compile) { return { restrict: "A", scope: false, compile: function() {

我编写了一个名为lobInclude的指令,我希望与ngInclude相同,但没有范围:

.directive("lobInclude", ["$templateRequest", "$compile", function($templateRequest, $compile)  {
        return {
            restrict: "A", 
            scope: false,
            compile: function()  {
                return {
                    pre: function(scope, elem, attrs) {
                        var toObserve = "lobInclude";
                        attrs.$observe(toObserve, function(value) {
                            value = scope.$eval(value);
                            $templateRequest(value, true).then(function(response) {
                                if (angular.isDefined(attrs.replace))
                                    elem.replaceWith($compile(angular.element(response))(scope));
                                else
                                    elem.append($compile(angular.element(response))(scope));
                            });
                        });
                    },
                    post: function() { }
                };
            }
        }
    }]);
使用my指令时,所有消息似乎都正常,但ng消息无法正常工作,您可以在此处看到一个示例:

在代码笔中,我有一个带有输入的表单和我的指令,其中包括一个包含其他输入的脚本ng模板

第一个输入中的ng消息可以正常工作,但我的include中没有


有什么想法吗?

问题是关于所需模板的编译:

$templateRequest(value, true).then(function(response) {
    if (angular.isDefined(attrs.replace))
        elem.replaceWith($compile(angular.element(response))(scope));
    else
        elem.append($compile(angular.element(response))(scope));
});
第二步是:创建一个元素,编译并在DOM中添加/替换该元素。调试angular.js我可以看到NgModelDirective是谁与FormDirective控制器通信以设置$pristine,$touch。。。NgModelDirective具有与父窗体通信所需的“^”窗体。 嗯,当我编译元素时,模板没有父表单,因为它不包括在DOM中。ngModel无法找到祖先表单,也无法设置$error、$pristine、$touch、

解决方案是将元素添加到DOM中,然后对其进行编译:

$templateRequest(value, true).then(function(response) {
    var responseElem = angular.element(response);
    if (angular.isDefined(attrs.replace))
        elem.replaceWith(responseElem);
    else
        elem.append(responseElem);
    $compile(responseElem)(scope)
});

谢谢

您为什么需要Lobbinclude?有了ng include,它就可以工作了。我需要在不创建子作用域的情况下包含模板,真实的示例更复杂,需要从外部访问模板的内容,反之亦然。