我正在建立一个菜单,允许用户更改我的Web应用程序上的CSS。我的js方法接受一个字符串,然后将其添加到引导CDN的URI中。当我对字符串进行硬编码时,该代码有效。当我使用数据绑定变量时,它变得很有趣。在开发人员工具中,我看到HTML显示应该存在数据绑定字符串。当我去查看浏览器试图获取哪个URI时,它实际上是在URI中添加{{style}}。我对这一切还很陌生,因此请原谅任何巨大的缺陷。我愿意接受任何建议。
这是我的开头html标签:
<html data-ng-app="app" lang="en" data-ng-controller="MainCtrl">
这是我的控制器:
app.controller('MainCtrl', function($scope) {
// default on load for now
$scope.stylePath = '//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css';
$scope.styles = ['slate', 'Cyborg', "Darkly", "journal", "Yeti"];
$scope.setStyle = function(styleName) {
$scope.stylePath = '//maxcdn.bootstrapcdn.com/bootswatch/3.2.0/' + styleName + '/bootstrap.min.css';
};
$scope.changePath = function() {
$scope.stylePath='//maxcdn.bootstrapcdn.com/bootswatch/3.2.0/slate/bootstrap.min.css';
};
});
如您所见,在我的数组中,我尝试了不同类型的引号以及小写和大写形式。 (单词必须是小写)还值得注意的是changePath()可以正常工作。当我尝试向其传递数据绑定值时,setStyle()从未起作用。向其传递字符串文字没有问题。
这是有问题的代码:
<div class="dropdown">
<a id="ThemeDropdown" class="btn btn-default" role="button" data-toggle="dropdown" title="Choose a theme">Themes <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu" aria-labelledby="ThemeDropdown">
<li role="presentation" data-ng-repeat="style in styles">
<a role="menuitem" tabindex="-1" href="#/settings" ng-click="setStyle('{{style}}')">{{ style }}</a>
</li>
<li role="presentation">
<a role="menuitem" tabindex="-1" href="#/settings" ng-click="changePath()">hardcode slate</a>
</li>
<li>
<a role="menuitem" tabindex="-1" href="#/settings" ng-click="setStyle('darkly')">hardcode darkly</a>
</li>
</ul>
</div>
顺便说一句,没有在setStyle()调用处在数据绑定周围加上引号会给我带来解析错误。
Error: [$parse:syntax] http://errors.angularjs.org/1.2.21/$parse/syntax?p0=style&p1=is%20unexpected%2C%20expecting%20%5B%3A%5D&p2=12&p3=setStyle(%7B%7Bstyle%7D%7D)&p4=style%7D%7D)
at Error (native)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:6:450
at cb.throwError (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:168:341)
at cb.consume (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:169:266)
at cb.object (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:177:45)
at cb.primary (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:167:478)
at cb.unary (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:174:160)
at cb.multiplicative (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:173:402)
at cb.additive (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:173:262)
at cb.relational (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js:173:126) <a role="menuitem" tabindex="-1" href="#/settings" ng-click="setStyle({{style}})">
angular.js:10023
有可能做我正在做的事情吗?我究竟做错了什么?
最佳答案
<a role="menuitem" tabindex="-1" href="#/settings" ng-click="setStyle('{{style}}')">{{ style }}</a>
应该
<a role="menuitem" tabindex="-1" href="#/settings" ng-click="setStyle(style)">{{ style }}</a>
无需在调用内部使用任何绑定。