1

我正在尝试设置一个 Angular 指令,以便我可以重用一段 HTML。我已经设法实现了这一点,但是我面临的问题是,当我想从包含的 HTML 中将一些值传递给该模板化的 HTML 时。

为简单起见,我将使用具有多个地址的客户的示例(在此上下文中,客户是一个对象,每个地址实例是附加到客户的另一个对象)。

数据示例:

var customer = {
    forename: "John",
    surname: "Smith",
    address1: {
        street: "123 Street",
        town: "Georgeville",
    },
    address2: {
        street: "67 Maple Grove",
        town: "SomeTown"
    }
};

这是我的指令设置的示例:

var module = angular.module(...);
module.directive("address", function () {
    return {
        restrict: 'A',
        templateUrl: '/AddressView.html'
    };
});

我尝试的用法:

<div ng-model="customer">
    <div address></div>
    <div address></div>
</div>

这就是我希望能够将客户的地址传递给模板化 HTML 的方法:

<div ng-model="customer">
    <div address ng-model="customer.address1"></div>
    <div address ng-model="customer.address2"></div>
</div>

我可能误解了指令的目的,或者这可能是不可能的,但如果有人有任何建议,他们将不胜感激。

如果您需要我添加任何进一步的信息,请告诉我。

编辑

这是我设置的一个Plunker,试图说明我想要实现的目标。

4

1 回答 1

2

您需要隔离指令的范围,以免角度混淆。而且您的对象以这种方式具有更好的结构:

var customer = {
    forename: "John",
    surname: "Smith",
    addresses: [
        address1: {
            street: "123 Street",
            town: "Georgeville",
        },
        address2: {
            street: "67 Maple Grove",
            town: "SomeTown"
        }
    ]
};

这样你可以这样做:

<div class="customer">
    <div address ng-repeat="address in customer.addresses">
        {{address.town}} {{address.street}}
    </div>
</div>

我不知道你为什么在这里使用 ng-model ?!
这是一个示例,但是如果您为plunker提供示例代码帮助您会更容易。

更新:

  • 首先,您的 ng-controller 位于错误的位置,您需要将其向上移动,以便地址指令可以在控制器的范围内,以便它可以访问地址对象。
  • 其次,您有 2 个未定义的变量:街道和城镇。
  • 并且您需要隔离范围,以便每个指令不会与另一个指令的变量混淆。

这是一个工作的笨蛋
希望这有帮助。

于 2013-04-12T09:30:38.673 回答