javascript - AngularJS - 更改指令的范围

标签 javascript html angularjs angularjs-directive

我正在尝试设置一个 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我设置它是为了说明我想要实现的目标。

最佳答案

你需要隔离你的指令的范围,这样就不会混淆 Angular 。 并且您的对象以这种方式更好地构造:

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 位于错误的位置,您需要将其向上移动,以便 address 指令可以在 Controller 的范围内,以便它可以访问 address 对象。
  • 其次,您有 2 个 undefined variable :街道和城镇。
  • 并且您需要隔离作用域,这样每个指令就不会混淆另一个指令的变量。

这是一个有效的 plunker .
希望对您有所帮助。

关于javascript - AngularJS - 更改指令的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15967244/

相关文章:

javascript - 滚动到 anchor JS 不起作用

javascript - 根据输入更改触发 DataTable 突出显示和过滤器

javascript - jQuery 美国 map 插件 - 为每个点击状态添加唯一的 .html

html - 具有动态内容的静态页脚

javascript - JQuery 代码在到达那里之前被执行

javascript - CSS 和 Javascript 不适用于从 h :outputText with escape ="false" 呈现的内容

HTML 电子邮件文本垂直对齐

javascript - Angular : Bind to transclusive directive without isolating the scope

javascript - Angular JS : creating table with json

javascript - 使用 ng-bind 绑定(bind)多个值