GVKun编程网logo

Golang模板(并将函子传递给模板)(golang 模板函数)

14

在这篇文章中,我们将带领您了解Golang模板的全貌,包括并将函子传递给模板的相关情况。同时,我们还将为您介绍有关angular2:将HTML元素传递给模板、Angular2:将函数传递给模板上的ng

在这篇文章中,我们将带领您了解Golang模板的全貌,包括并将函子传递给模板的相关情况。同时,我们还将为您介绍有关angular 2:将HTML元素传递给模板、Angular 2:将函数传递给模板上的ngClass标记、angular – 将NavigationExtras传递给模板中的routerLink、angularjs – 如何在使用createDialog时将动态数据传递给模板的知识,以帮助您更好地理解这个主题。

本文目录一览:

Golang模板(并将函子传递给模板)(golang 模板函数)

Golang模板(并将函子传递给模板)(golang 模板函数)

尝试访问传递给模板的函数时出现错误:

Error: template: struct.tpl:3: function "makeGoName" not defined

有人可以让我知道我在做什么错吗?

模板文件(struct.tpl):

type {{.data.tableName}} struct {  {{range $key, $value := .data.tableData}}  {{makeGoName $value.colName}} {{$value.colType}} `db:"{{makeDBName $value.dbColName}},json:"{{$value.dbColName}}"`  {{end}}}

调用文件:

type tplData struct {    tableName string    tableData interface{}}func doStuff() {    t, err := template.ParseFiles("templates/struct.tpl")    if err != nil {        errorQuit(err)    }    t = t.Funcs(template.FuncMap{        "makeGoName": makeGoName,        "makeDBName": makeDBName,    })    data := tplData{        tableName: tableName,        tableData: tableInfo,    }    t.Execute(os.Stdout, data)}func makeGoName(name string) string {    return name}func makeDBName(name string) string {    return name}

这是用于生成struct样板代码的程序(以防万一有人想知道为什么我要在模板中这样做)。

答案1

小编典典

自定义函数需要在解析模板之前进行注册,否则解析器将无法分辨标识符是否为有效的函数名。模板被设计为可静态分析的,这是必需的。

您可以先使用创建一个新的未定义模板template.New(),并且除了
函数 之外,类型(由返回)还具有 方法
,您可以调用该方法。template.ParseFiles()
template.TemplateNew()Template.ParseFiles()

像这样:

t, err := template.New("").Funcs(template.FuncMap{    "makeGoName": makeGoName,    "makeDBName": makeDBName,}).ParseFiles("templates/struct.tpl")

请注意,该template.ParseFiles()函数还会template.New()在后台调用,将第一个文件的名称作为模板名称传递。

Template.Execute()返回error,打印以查看是否未生成任何输出,例如:

if err := t.Execute(os.Stdout, data); err != nil {    fmt.Println(err)}

angular 2:将HTML元素传递给模板

angular 2:将HTML元素传递给模板

我传递的数据源如下:
<a href="javascript:blahblah...>Something</a>

我分配它来说锚:HTMLAnchorElement;在组件中.当我尝试在模板中显示它时,如下所示:

{{anchor}}

它出来的javascript:0 blehblahek.

我想要做的就是将HTML元素传递给模板.我怎样才能做到这一点?

您正在寻找innerHTML,例如:

零件

someHtmlCode: string = "<div><b>This is my HTML.</b></div>"

模板

<div [innerHTML]="someHtmlCode"></div>

但是,如果要传递脚本标记或其他一些有潜在危险的代码,则需要使用DomSanitizer.

Angular 2:将函数传递给模板上的ngClass标记

Angular 2:将函数传递给模板上的ngClass标记

我已经对此做了一些搜索,但没有发现任何有用的东西.

当我将函数传递给ngStyle时,我得到以下错误:

ProductView中的表达式’getClass()’在检查后发生了变化.

我的模板看起来像:

<div>
    <div[ngClass]="getClass()">
        <img [src]="'img/thumbs/' + item.images[0]"https://www.jb51.cc/tag/timage/" target="_blank">timage" id="productimage">
    </div>
</div>

我不知道什么会解决这个问题,即使目前可以做到这一点.我注意到ngStyle也会出现这个错误.

所有帮助将不胜感激.

属性绑定使用以下语法:[someProperty] =“一个Angular模板表达式”.

在您的情况下,模板表达式是一个函数(而不是组件属性).没关系.但根据Template Syntax开发指南的“表达指南”部分,表达式必须是“幂等的”.这意味着,如果

expression returns a string or a number,it returns the same string or number when called twice in a row. If the expression returns an object (including a Date or Array),it returns the same object reference when called twice in a row.

由于您没有为getClass()函数提供代码,我们只是假设它违反了幂等规则. (您可能每次都返回一个新数组或一个新对象.)

在开发模式(默认模式)中,更改检测运行两次,它将捕获幂等违规.

要解决此问题,请返回相同的数组或对象引用(但您可以修改数组内容或对象属性/值).例如.,

export class MyComponent {
   anArray = [];
   getClass() {
      // manipulate (don't reassign) anArray here,and return it
      return this.anArray;
   }
}

angular – 将NavigationExtras传递给模板中的routerLink

我想在我的Angular 2应用程序中进行路由时禁用更改URL.

我知道skipLocationChange:true必须作为NavigationExtras参数传递给路由器.

我的问题是:

是否可以从模板内部将NavigationExtras传递给routerLink?

我试过的:

<h1>
  {{title}}
</h1>

<ul>
    <li><a [routerLink]="['route1',{ skipLocationChange: true }]">Route1</a></li>
    <li><a [routerLink]="['route2',{ skipLocationChange: true }]">Route2</a></li>
</ul>

<router-outlet></router-outlet>

但它不起作用.

单击链接后,路由将更改为http:// localhost:4200 / route2; skipLocationChange = true

我不想在我的控制器中使用this.router.navigate([‘route1],{skipLocationChange:true),从此我失去了routerLinkAtive突出显示.

没有办法(现在和afaik)同时具有routerLinkActive和skipLocationChange并期望你想要的结果.根据 api,您可以添加选项,但没有skipLocationChange选项.

但是,您可以将路由器中的NavigationExtras与ActivatedRoute结合使用,并根据该链接是否应该处于活动状态

更新

从2.3.0-beta.0开始,您可以将skipLocationChange选项添加到routerLink指令:

<li><a [routerLink]="['route1']" skipLocationChange>Route1</a></li>

angularjs – 如何在使用createDialog时将动态数据传递给模板

angularjs – 如何在使用createDialog时将动态数据传递给模板

我的UI有两个按钮,一个用于Create,另一个用于Edit.

>创建 – 应显示弹出的空字段
>编辑 – 现有数据应预先填充以弹出
>我使用相同的弹出窗口进行创建和编辑操作

create_quick_link.html
<div>
    <div>
      <label>
         <font>Name</font>
          <span>*</span>
      </label>
      <input placeholder="Name" type="text" ng-model="quickLink.name">
    </div>
    <div>
       <label>
         <font>URL</font>
         <span>*</span>
       </label>
       <input placeholder="URL" type="text"  ng-model="quickLink.url">
    </div>
 </div>


$scope.editQuickLink = function (editableQuickLinkdata) {

        $scope.quickLink.name = editableQuickLinkdata.quickLinkName;
        $scope.quickLink.url = editableQuickLinkdata.quickLinkUrl;
        createDialog({
            templateUrl: '/app/ajs/followup/app/views/create_quick_link.html',title: 'Edit Quick Link',controller: 'FollowupssettingsCtrl',footerTemplate: '<buttonng-click="updateQuickLink(quickLink)">Update</button>'
        });

    }

我想设置
editableQuickLinkdata to quickLink

我的数据没有填充.我做错了吗?

你可以这样做:
$scope.editQuickLink = function (editableQuickLinkdata) {
    createDialog({
        templateUrl: '/app/ajs/followup/app/views/create_quick_link.html',controller: 'EditCtrl',footerTemplate: '<buttonng-click="updateQuickLink(quickLink)">Update</button>'
    },{myOldData: editableQuickLinkdata});

}

然后在EditCtrl中,除了$scope之外,您将获得myOldData作为参数:

angular.module('MyApp').controller('EditCtrl',['$scope','myOldData',function($scope,myOldData) {
 // Do stuff 
}]);

我们今天的关于Golang模板并将函子传递给模板的分享已经告一段落,感谢您的关注,如果您想了解更多关于angular 2:将HTML元素传递给模板、Angular 2:将函数传递给模板上的ngClass标记、angular – 将NavigationExtras传递给模板中的routerLink、angularjs – 如何在使用createDialog时将动态数据传递给模板的相关信息,请在本站查询。

本文标签: