javascript - 你如何在angularjs中重用模板

标签 javascript angularjs templates

如何重复使用模板?考虑以下 javascript 对象:

{
    MyName: '',
    Address: {
        Street: ''
    },
    MyEmployer: {
        CompanyName: '',
        Address: {
            Street: ''
        }
    }
}

还有一个位于 /templates/myTemplate.html 的模板文件:

<div ng-app="someapp" ng-controller="somecontroller">
    MyName: <input type="text" ng-model="MyName" />

    <div ng-include="'/templates/address.html'"></div>

    My Company: <input type="text" ng-model="MyEmployer.CompanyName" />

    <div ng-include="'/templates/address.html'"></div>
</div>

这是我想象中位于 /templates/address.html 的地址模板文件的样子:

<div>
    Street: <input type="text" ng-model="Street" />
</div>

如您所见,我正在尝试重新使用此处的地址模板。那么如何将适当的对象传递给此模板呢?

最佳答案

回答 我设法自己解决了这个问题,并想将它张贴在这里,以供下一个可能正在寻找同样款待的人使用。

我的解决方案

在我的 OP 中,我有一个包含两个地址的模型对象,一个地址是此人的家,另一个地址是他/她的雇主。因此,在 /templates/address.html 中采用相同的对象模型和相同的地址模板,我们可以添加两个额外的 Controller :

app.controller('personAddressController', ['$scope', function($scope) {
   $scope.Street = function(newValue) { return arguments.length ? model.Address.Street = newValue : model.Address.Street; }
}]);
app.controller('companyAddressController', ['$scope', function($scope) {
   $scope.Street = function(newValue) { return arguments.length ? model.MyEmployer.Address.Street = newValue : model.MyEmployer.Address.Street; }
}]);

地址模板的 ng-include 用法:

<div ng-include="'/templates/address.html'" ng-controller="personAddressController"></div>

<div ng-include="'/templates/address.html'" ng-controller="companyAddressController"></div>

我们还需要修改我们的地址模板:

<div>
    Street: <input type="text" ng-model="Street" ng-model-options="{ getterSetter: true }" />
</div>
<!--or add a form if you have more fields like i did-->
<form ng-model-options="{ getterSetter: true }">
    <div>
        Street: <input type="text" ng-model="Street" />
    </div>
</form>

有关 ng-model-options 和 setter/getter(页面底部)的更多信息:https://docs.angularjs.org/api/ng/directive/ngModel

虽然添加表单时要小心,因为默认情况下 enter 键会进行提交,但如果您愿意,您可以轻松控制它。

最后,您可以使用指令来完成所有这一切,正如有人已经建议的那样,但您最终会使用 Angular Directive(指令)作为 Controller ,并且根据 Angular ,它们并不是为此而设计的,更多信息在这里:AngularJS - Directives vs Controllers

关于javascript - 你如何在angularjs中重用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163209/

相关文章:

javascript - 自动将焦点设置在动态加载的输入字段上

javascript - 在 React-Redux 应用程序中访问另一个组件中的 Connect 函数值时出现问题

javascript - 如何使用 Bootstrap 将 ng-repeat 数据拆分为三列

javascript - Angular ui 网格,更改 "Export all data as csv"的行为

c++ - 使用模板化方法处理意外行为

javascript - 仅使用控件将音频从 html5 javascript 流式传输到 chromecast

javascript - promise 拒绝不触发

javascript - 编写 JavaScript 测试来测试其他函数的调用,而不实际调用它们

C++03 链接器 "already defined symbol"没有出现在中间文件中

c++ - std::string 和 char* 的特化函数模板