vue.js Uri动态模板

时间:2018-01-21 20:42:47

标签: vue.js

我'我试图在vue中实现动态Uri模板

数据:

new Vue({
  el: '#app',
  data: {
     "navigation": [
        {
          "url": "https://domainxxx.org/{param1}",
          "param1": "John",
          "param2": "123"

        },
        {
          "url": "https://otherdomain.org/{param2}",
          "param1": "Other",
          "param2": "43213432143214"

        }
        ]
  }})

代码:

<div id="app">
 <template v-for="row in navigation">
 <br/>
  <a  :href="row.url"> Hello </a>  <<<<<<<<<<<<<<<
 </template>
</div>

对于此示例预期链接(href)

在绑定属性期间是否有任何选项可以进行模板化?

3 个答案:

答案 0 :(得分:2)

您可以使用计算属性+任何模板引擎或简单字符串连接来实现此目的。

但是,在你的例子中,我没有在两个网址之间设置任何模式,你能告诉我为什么要对它们进行参数化吗?

编辑: 好的,得到了​​这个;) 您需要存储唯一的网址模板。所以在这种情况下我会添加url提取方法:

methods: {
  getUrl: function(navigation) {
    return TemplateEngineOfYourChoice.Template(navigation.url, navigation);
  }
}

<a  :href="getUrl(row)"> Hello </a>

答案 1 :(得分:1)

DonMateo的回答是正确的:您需要使用自定义方法来呈现每行的网址。这里我使用Mustache,但您可以使用您选择的模板语言:

Mustache.tags = ['{', '}'] // Using custom delimiters, since the default is {{ }}
new Vue({
  el: '#app',
  data: {
     "navigation": [
        {
          "url": "https://domainxxx.org/{param1}",
          "param1": "John",
          "param2": "123"

        },
        {
          "url": "https://otherdomain.org/{param2}",
          "param1": "Other",
          "param2": "43213432143214"

        }
        ]
  },
  methods: {
    getURL: function(row) {
       return Mustache.render(row.url, row)
    }
  }
})

模板:

<a :href="getURL(row)"> Hello </a>

答案 2 :(得分:0)

Jst有完整的衣服 谢谢你@donMateo我会接受你的衣服,因为它引导我解决这个问题。我现在还不确定什么是最好的方法使用计算的poperty或函数,函数更容易,所以发布解决方案。

所以answear是使用功能

<a  :href="getUrl(url,data)"> Hello </a>

这是我们为每个对象提供动态网址临时文件的情况

我找到了两种做模板的方法 - https://medialize.github.io/URI.js/uri-template.html 和 一些解决我案例的自定义代码

 getUrl: function (url,data)
        {
            var keys = Object.keys(data);
            for (var i = 0; i < keys.length; i++) {
                var key = keys[i];
                url = url.replace(/{[^{}]+}/g, data[key]);
            }
            return url;

        }