Angular JS - {{}}不起作用,但data-ng-bind显示范围

时间:2015-08-11 21:38:58

标签: javascript angularjs angularjs-directive angularjs-service

我对Angular JS有一个问题。我不知道为什么我在范围内的数据不能与{{}}一起显示,但如果我使用该指令,则可以显示:data-ng-bind。

如果有人有想法:

这是我的HTML代码:

<aside  id="sidebar-left" class="sidebar-left" data-ng-controller="PortalController" data-ng-init="getAppslist()">

    <div class="sidebar-header">
        <div class="sidebar-title">
            Navigation
        </div>
        <div class="sidebar-toggle hidden-xs" data-toggle-class="sidebar-left-collapsed" data-target="html" data-fire-event="sidebar-left-toggle">
            <i class="fa fa-bars" aria-label="Toggle sidebar"></i>
        </div>
    </div>

    <div class="nano" >
        <div class="nano-content">
            <nav id="menu" class="nav-main" role="navigation">
                <ul class="nav nav-main">
                    <li class="nav-active">
                        <a href="#!/">
                            <i class="fa fa-home" aria-hidden="true"></i>
                            <span>Dashboard</span>
                        </a>
                    </li>
                    <li>
                        <a href="#!/users">
                            <i class="fa fa-users" aria-hidden="true"></i>
                            <span>Users</span>
                        </a>
                    </li>

                    <li class="nav-parent">

                        <a href="#!/apps">
                            <i class="fa fa-cubes" aria-hidden="true"></i>
                            <span>Apps</span>
                        </a>
                        <ul class="nav nav-children">
                            <li ng-repeat="app in appslist">
                                <a ng-href="#!/apps/{{app.CloudAppInstanceId}}">{{app.Name}}</a>
                            </li>
                        </ul>
                    </li>

                </ul>
            </nav>

        </div>
    </div>
</aside>

这是我的控制人员:

angular.module('core').controller('PortalController', ['$scope', 'Portal',
function($scope, Portal) {
    $scope.getAppslist = function() {
        Portal.getApps(function(callback) {
            $scope.appslist = callback;
            $scope.blabla = 'blabla';
        });
    };
}]);

这是我的服务:

angular.module('core').factory('Portal', function($http, $cookies, $rootScope) {
// define factory object
var factory = {};



var getApps = function(callback){
    $http.get($rootScope.logrrApiAddress + '/apps', config).success(function(data, status, headers, config) {
        callback(data);
    });
}

factory.getApps = function(callback){
    return getApps(callback);
}});

提前感谢您的回复

Martin Taz

2 个答案:

答案 0 :(得分:1)

你不需要ng-href中的把手。尝试:

<a ng href="'#!/apps/' + app.CloudAppInstanceId">{{app.Name}}</a>

最好将其转换为控制器上的方法。

答案 1 :(得分:0)

<a ng href="'#!/apps/' + app.CloudAppInstanceId">{{app.Name}}</a>

我觉得应用程序未在范围内定义,但您在PortalController中设置的内容是$scope.appslist

此外,Portal工厂函数必须返回一个对象实例(它当前不会返回任何内容)。并且工厂的方法也必须实际返回承诺。

angular.module('core').factory('Portal', [
    '$http', '$cookies', '$rootScope',
    function($http, $cookies, $rootScope) {

        var factory = {};  // define factory object

        factory.getApps = function(){
            // FIXME: what is "config", where is it supposed to come from?
            return $http.get($rootScope.logrrApiAddress + '/apps', config);
        };

        return factory;  // <-- you need to return something
    }
]);

angular.module('core').controller('PortalController', [
    '$scope', 'Portal',
    function($scope, Portal) {
         $scope.getAppslist = function() {
             Portal.getApps().then(function (data) {
                 $scope.apps = data;
                 $scope.blabla = 'blabla';
             });
         };
    }
]);

我改变了一点,特别是。摆脱callback参数 - 你不需要它,只需获得getApps()返回的承诺,并在解决了承诺后使用数据。