2016-08-15 26 views
0

我正在构建基于AngularJS的Web应用程序。我正在以标题形式填充标题标签,以便每个页面都发生变化。当我在线托管应用程序&通过Skype与我的朋友(通过Skype即时消息)共享通向Skype的链接,而不是呈现解析的值metaTitle,Skype会将其呈现为{{metaTitle}}。所以我的朋友们正在看看里面的文字大括号metaTitle当在Skype中粘贴链接时,AngularJS应用标题呈现为{{metaTitle}}

作为聊天消息的一部分,在Skype和其他本机应用程序中实际显示已粘贴的链接的预览时,可以如何处理已解析的值metaTitle

这里是我的代码:

<html ng-app="myApp"> 
<head> 
     <title>{{metaTitle}}</title> 
</head> 
<body ng-controller="myController"> 
     Custom content 
</body> 
</html> 
+0

也许尝试用'<标题NG绑定=“metaTitle”>'?虽然我有一种感觉,它可能只是复制并粘贴一个空的标题。 – plong0

+0

什么是{{metaTitle}}?我的意思是它来自哪里? –

+0

它是否在控制器中定义,然后看到它不在控制器内部。 –

回答

0

如果你想真正的,动态的标题,你就需要渲染在服务器端对这些机器人的页面(或服务页面的静态缓存) ,因为他们不执行允许填充标题的JavaScript。

否则,你可以在页面中使用

<title ng-bind="metaTitle">Static title for Skype</title> 
+0

Bu这将为每个页面呈现相同的静态消息。正确?例如,假设我使用静态消息作为“欢迎”,并且如果我将链接粘贴到主页上,那么我的朋友可能会看到“欢迎”。如果我将链接粘贴到联系人页面,则他们仍然会看到“欢迎”作为消息,而不是显示“联系人”之类的内容。这可以解决吗? – Devner

+1

是的,正如我在答复中所说的那样,可以通过在服务器端生成标题来完成。正如我们在Angular等JS单页面框架变得流行之前所做的那样,您不需要提供静态index.html页面,而是提供动态生成的页面。 –

+0

谢谢,我明白了。但我现在不能改变框架,也不能将AngularJS转储为另一个框架。那么现在还有可能通过当前的结构和框架来实现这一目标吗? – Devner

0

Skype不执行/解释JavaScript的(在这种情况下AngularJS)。所有的Skype知道的是静态的HTML内容。

您可能希望查看服务器端渲染或为您的应用程序设置静态登录页面。

编辑:根据@JB Nizet的答案,您还可以使用以下语法。

<title ng-bind="metaTitle">Static title for Skype</title> 
+0

我想我已经尝试过了,但是让我再试一次。 – Devner

-1

既然你提到,你是从你的控制器填充metaTitle,您需要将控制器声明移到HTML标签:

<html ng-app="myApp" ng-controller="myController"> 
<head> 
     <title>{{metaTitle}}</title> 
</head> 
<body> 
     Custom content 
</body> 
</html> 
+0

我认为你说的父节点上的控制器是正确的。但是,OP面临的问题是与机器人(Skype)不在页面中执行JavaScript有关。 – Pablo

+0

我这样做:'$ scope。$ parent.metaTitle =“Home”;'。所以将ng控制器移动到html并不能解决我的问题。 – Devner

+0

我明白@JB Nizet正在说什么,所以也许如果你可以在这些线上添加一些东西,我可以试试,也许这会帮助我。 – Devner