从控制器到指令输出把手不具有约束力

时间:2013-04-06 05:12:57

标签: javascript angularjs

我有以下指令,对于所有其他情况,该指令正常工作:

.directive('breadcrumbs', function() {
    return {
        restrict: "E",
        replace: true,
        template: '<ul class="breadcrumb offset2" ng-show="breadcrumbs">'
                +'<li ng-repeat="crumb in breadcrumbs">'
                    +'<span ng-hide="crumb[1]">{{crumb[0]}}</span>'
                    +'<a ng-show="crumb[1]" href="#{{crumb[1]}}">{{crumb[0]}}</a>'
                    +'<span ng-show="crumb[1]" class="divider">/</span>'
                +'</li>'
            +'</ul>'
    }
}

它需要一组“crumbs”,每个crumb是一个包含['title', 'href']的数组,例如:

$scope.breadcrumbs = [ ['Home', '/'], ['Projects', '/project'], ['Add', ''] ]

如果href为空,则ngShow / ngHide组合起来隐藏链接并仅输出文字。

当这成为一个问题时,我想从面包屑中的控制器输出$ scope变量,例如:

var ProjectViewCtrl = function ($scope, $routeParams, Project) {
    $scope.project = Project.get({id: $routeParams.id})
    $scope.breadcrumbs = [ ['Home', '/'], ['Projects', '/project'], ['{{project.name}}', ''] ]
}

目的是在{{project.name}}输出面包屑的最后一个元素,然后一旦Project.get完成,面包屑就会随着控制器模板中的其他内容一起更新。不幸的是,这不会发生,文本{{project.name}}将输出到页面,永远不会更新。

我知道另一种方法是在Project.get成功回调中设置面包屑,但这不会真正具有约束力,我只是更新了值,因此否定了其中一个主要原因。使用Angular:)

1 个答案:

答案 0 :(得分:1)

请放弃这个小提琴http://jsfiddle.net/BJP3v/1/ng-bind用于将动态项目名称绑定到视图。

然后,为了测试绑定是否有效,在控制器范围中创建了test方法。 按下按钮时,项目名称将更新。请将项目名称的更新置于$http来电或$resource来电的回调中