我正在建立一个菜单,允许用户更改我的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>


无需在调用内部使用任何绑定。

09-27 10:45
查看更多