【问题标题】:How to duplicate a directive with isolated scopes如何复制具有隔离范围的指令
【发布时间】:2014-02-12 22:27:20
【问题描述】:

如何将输入的文本从我的指令推送到ng-submit 上的$scope.output = []

查看实时代码: JSFiddle

我创建了一个锚点和 attr 指令<a href="" data-clicker>add section</a>,它在表单内附加了一个具有隔离范围的输入字段。

指令:

app.directive('clicker', function($compile) {
    'use strict';

    return {
        compile: function(tElement, tAttrs) {
            var t = '<div data-pop>Pop</div>';

            return function(scope, iElement) {
                iElement.click(function() {
                    $('.sections').append($compile(t)(scope));
                });
            };
        }
    }
});

app.directive('pop', function() {
    'use strict';

    return {
        scope: {
            name: '='
        },
        template: '<input type="text" ng-model="project.name" />'
//        templateUrl: 'partials/pop.html'
    };
});

当我尝试提交表单时,数据未正确推送。

html

<div ng-app="miniapp" ng-controller="MainCtrl">
     <a href="" data-clicker>add section</a>
    <form ng-model="project" ng-submit="addPage()">
        <div class="sections"></div>  

        <input type="submit" value="submit"/>
    </form>

    <hr>
    <hr>
    <p>project: {{project.name | json}}</p> 
    <p>output: {{output | json}}</p> 
</div>

控制器

app.controller('MainCtrl', function($scope) {
    $scope.project = {"name":"sup"};
    $scope.output = [];
   $scope.addPage = function() {
     $scope.output.push($scope.project);     
   };

【问题讨论】:

    标签: javascript jquery html angularjs


    【解决方案1】:

    我已经更新了您的小提琴:http://jsfiddle.net/89AYX/31/,并且只是将您的内部指令移动到您的外部指令所在的位置,并且它看起来可以按预期工作。

    var t = '&lt;div&gt;&lt;input type="text" ng-model="project.name"&gt;&lt;/div&gt;';

    问题似乎是您没有编译内部输入指令。

    【讨论】:

    • 现在可以了!但是,这些指令不是孤立的?当您添加多个版本时,它们会重复相同的文本
    • 它们重复相同的文本,因为指令内的ng-model 指向同一个范围对象。
    • 有没有办法可以合并这两个想法?并具有隔离范围和编译,因此我可以复制输入字段
    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 2016-05-03
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多