Angular JS-{{}}不工作,但数据绑定显示作用域



我遇到了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

在ng href中不需要车把。尝试:

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

更好的方法是将其转化为控制器上的方法。

<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((返回的promise,并在promise解析后使用数据。