当前位置: 首页 > 面试题库 >

如何在AngularJS中为ngInclude指令指定模型?

丁俊智
2023-03-14
问题内容

我想在3个地方使用相同的HTML模板,只是每次使用不同的模型。我知道我可以从模板访问变量,但是名称会有所不同。

有没有办法将模型传递给ngInclude?

这是我想要实现的,当然add-variable属性现在不起作用。然后,在我包含的模板中,我将访问detailsObject及其属性。

<pane title="{{projectSummary.ProjectResults.DisplayName}}">
    <h2>{{projectSummary.ProjectResults.DisplayName}}</h2>
    <ng-include src="'Partials/SummaryDetails.html'" init-variable="{'detailsObject': projectSummary.ProjectResults}"></ng-include>
</pane>

<pane  title="Documents" header="true"></pane>

<pane ng-repeat="document in projectSummary.DocumentResults" title="{{document.DisplayName}}">
    <h2>{{document.DisplayName}}</h2>
    <ng-include src="'Partials/SummaryDetails.html'" add-variable="{'detailsObject': document}"></ng-include>
</pane>

<pane ng-repeat="header in [1]" title="Languages" header="true"></pane>

<pane ng-repeat="language in projectSummary.ResultsByLanguagePairs" title="{{language.DisplayName}}">
    <h2>{{document.DisplayName}}</h2>
    <ng-include src="'Partials/SummaryDetails.html'" add-variable="{'detailsObject': language}"></ng-include>
</pane>

如果我使用ng-include的方法不好,还有其他应该尝试的方法吗?


问题答案:

注意:这不是我的原始答案,但是这是我在稍微使用角度后会做的事情。

我想创建一个HTML模板传递动态数据的指令,因为在看到标记一个指令,这个小提琴。

此示例的步骤/注释:

  1. templateUrl和属性中定义带有标记的指令,该指令用于将数据传递到指令中(type在此示例中命名)。
  2. 在模板中使用指令数据(type在此示例中为名称)。
  3. 在标记中使用指令时,请确保将数据从控制器作用域传递到指令(<address-form type="billing"></address-form>(计费正在访问控制器作用域中的对象)。
  4. 请注意,在定义指令时,名称以驼峰大小写,但在标记中使用时,则以小写破折号分隔(即,addressForm在js中但address-form在html中命名)。可以在这里的角度文档中找到关于此的更多信息。

这是js:

var myApp = angular.module('myApp',[]);

angular.module('myApp').directive('addressForm', function() {
    return {
        restrict: 'E',
        templateUrl: 'partials/addressform.html', // markup for template
        scope: {
            type: '=' // allows data to be passed into directive from controller scope
        }
    };
});

angular.module('myApp').controller('MyCtrl', function($scope) {
    // sample objects in the controller scope that gets passed to the directive
    $scope.billing = { type: 'billing type', value: 'abc' };
    $scope.delivery = { type: 'delivery type', value: 'def' };
});

带有标记:

<div ng-controller="MyCtrl">
    <address-form type="billing"></address-form>
    <address-form type="delivery"></address-form>
</div>

原始答案(与使用指令BTW完全不同)。

注意:由于错误,我下面原始答案中的小提琴似乎不再起作用(但请保留在此处,以防仍然有用)

Google网上论坛对此进行了讨论,您可以在此处查看。

它看起来像这样的功能不支持开箱即用,但你可以使用布莱斯的补丁中描述的这个帖子。

这是他的jsfiddle的示例代码:

<script id="partials/addressform.html" type="text/ng-template">
    partial of type {{type}}<br>
</script>

<div ng-controller="MyCtrl">
  <ng-include src="'partials/addressform.html'" onInclude="type='billing'"></ng-include>
  <ng-include src="'partials/addressform.html'" onLoad="type='delivery'"></ng-include>
</div>


 类似资料:
  • 问题内容: 我喜欢使用指令制作自定义组件。我检查了很多教程,它使我感到困惑,任何人都可以解释指令的工作原理。我计划制造的组件是 呼喊列表的模板将像这样 问题答案: 这是您的指令,带有一些内联注释: 和模板文件: 现在,您可以在代码中使用它,如下所示: 控制器: 视图: 希望这可以帮助!

  • 问题内容: 我创建了一个生成Twitter按钮的指令。由于这些按钮上的作用域变量可能会更改,因此我需要在按钮发生时重新构建它。目前,我正在使用jQuery 链接元素并重建按钮。 有没有办法让指令完全重新呈现模板呢? 问题答案: 这是一个可重用的指令,您可以使用它在发送事件时重建被包含的内容: 这是一个jsFiddle演示其工作原理:http : //jsfiddle.net/robianmcd/Z

  • 问题内容: 我正在使用SVG和angular.js进行大型项目,并且需要对svg指令模板的坚实支持。不幸的是,当angular渲染模板时,它将创建DOM节点,而不是SVG节点。我当前的解决方法是使用jquery.svg自己管理创建和删除节点,但是它受到限制。示例:http://plnkr.co/edit/Xk8wM3?p = preview 我想让指令成为实际的svg元素,而不是一些没有任何实际作

  • 主要内容:AngularJS 指令,AngularJS 实例,数据绑定,AngularJS 实例,重复 HTML 元素,AngularJS 实例,AngularJS 实例,ng-app 指令,ng-init 指令,ng-model 指令,ng-repeat 指令,创建自定义的指令,AngularJS 实例,限制使用AngularJS 通过被称为 指令 的新属性来扩展 HTML。 AngularJS 通过内置的指令来为应用添加功能。 AngularJS 允许你自定义指令。 AngularJS 指令

  • 问题内容: 通常,每次用户按下键时,ng-model都会更新绑定模型: 在几乎所有情况下,这都非常有效。 但是我需要它在onchange事件发生时进行更新,而不是在onkeyup / onkeydown事件发生时进行更新。 在较旧的angular版本中,有一个ng-model-instant指令,其功能与现在的ng- model相同(至少对于用户而言,我对它们的实现一无所知)。因此,在较旧的版本中

  • 问题内容: 我正在做的事情非常精简,可以解决问题。 我有一个简单的。每当您单击一个元素时,它都会添加另一个元素。但是,需要先对其进行编译才能正确呈现。 我的研究使我走向了。但是所有示例都使用了一个复杂的结构,我真的不知道如何在这里应用它。 小提琴在这里:http : //jsfiddle.net/paulocoelho/fBjbP/1/ JS在这里: Josh David Miller的解决方案: