2017-07-28 20 views
1

我试图使用ng-href动态加载不同的css样式到我的页面中,但页面没有使用激活的样式进行更新。代码如下:未通过ng-href动态加载CSS文件

<html ng-app="myapp" ng-controller="myController as myctrl"> 
    <head> 
     <link rel="stylesheet" ng-href="../assets/css/{{ myctrl.style }}.css"> 
    </head> 
</html> 

在我的控制,我做到以下几点:

vm.style = "redStyle"; 
pub.subscribe('style', function(theStyle) { 
    vm.style = theStyle; 
}); 

变量在subscribe与新的风格一旦发布已经发生更新。但是相应的css文件未被加载,因此样式在页面上更新。任何想法我错过了什么?

+0

有两个// – Vivz

+0

你能在开发检查。控制台,如果它返回一个“404 - 找不到文件”? – Jordumus

+0

对不起,额外的“/”是一个错字。 – YourReflection

回答

0

Here is a working demo

这是非常一样的,你有什么,所以这是别的东西在你的代码。很难说,除非你把所有的代码。

假设样式表实际上确实存在,而且款式变量得到更新,然后我的猜测是,罪魁祸首是

pub.subscribe() 

如果这个回调是由一些角度则角外被触发不会看到更新变量。你可以把它放回角度空间,像这样:

pub.subscribe('style', function (theStyle) { 
    $scope.$apply(function(){ 
     vm.style= theStyle; 
    });    
}); 
0

试试这个:

<link rel="stylesheet" data-ng-if="myctrl.style" data-ng-href="../assets/css/{{ myctrl.style }}.css" /> 
0

我解决了不同的看法。 在我的HTML,我给的链接元素的ID:

<link id="theme" rel="stylesheet" ng-href="../assets/css/{{theme}}.css"> 

和Controller我说:

var myTheme = document.getElementById("theme"); 
var path = "../assets/css/{{theme}}.css"; 
myTheme.href = path.replace("{theme}", theme.class);