显示ng-repeat的错误

时间:2015-09-08 07:57:31

标签: javascript angularjs ng-repeat

我必须制作面包屑。所以我为此目的提供了服务。

我在HTML中使用ng-repeat显示所有面包屑,我正在收听'$ routeChangeStart'事件以重置面包屑并用新内容填充它。

问题是:面包屑会暂时部分更新,然后完全更新。

让我告诉你。

  1. '$ routeChangeStart'活动前的面包屑

    数组内容:['Home', 'Product', 'Product Name']

    在页面上显示:主页/产品/产品名称

  2. '$ routeChangeStart'事件触发

    数组内容:[]

    在页面上显示:Home / Product / Product name

  3. 网页已满载

    数组内容:['Home', 'New page']

    在页面上显示:/ Home / New page / Home / Product / Product page

  4. 后几毫秒

    在页面上显示:Home / New page

  5. 所以这是我的问题:这里发生了什么?

    我已经尝试通过执行操作告诉angularjs数据已更改 $scope.$apply,或$scope.$digest()$timeout()没有成功。

    我的面包屑正在使用一个呈现.html模板的指令。

    指令:

    app.directive('MenuTop', function(){
        return {
            restrict: 'E',
            templateUrl: '/frontend/pages/menus/menu_top.html',
            controller: ['$scope', 'Breadcrumb', function($scope, Breadcrumb){
                $scope.Breadcrumb = Breadcrumb;
            }]
        };
    });
    

    面包屑服务:http://pastebin.com/GR8FTn3h

    menu_top.html:http://pastebin.com/4j5m0PKA

1 个答案:

答案 0 :(得分:0)

在指令内部,您可以为

指定值
$scope.Breadcrumb = Breadcrumb

但它不会创造任何观察者。你应该做

$scope.$watch( 
   function() { return Breadcrumb; }, 
   function (newValue) { $scope.Breadcrumb = newValue}, 
   true
);

它将检查每个摘要周期的Breadcrumb值。 '真正的'最后意味着你需要深入检查,而不是参考检查。

范围文档:Angular docs