我有一个方案,我有一个共享按钮,我有一个名为metaCtrl的容器控制器,它位于html标记上。

还有内部控制器。

我有一个共享按钮,单击后会调用model.share()函数。

码:

app.controller('metaCtrl', function($scope){
$scope.model = {};
    $scope.model.share = function(){
        $location.path('/share').search({'share' : '1'});
    }
});


自我共享页面的控制器:

app.controller('shareCtrl', function($scope)){
 $scope.layout.shareVisible = $location.path().share == 1 ? true : false;
    $scope.model.share = function(){
         $scope.layout.shareVisible = $scope.layout.shareVisible ? false : true;
         var shareUrlValue = $scope.layout.shareVisible ? 1 : null;

         $location.search('share', shareUrlValue);
    }
});


想法是在整个应用程序中使用相同的HTML模式,但仅用于切换共享页面上的共享部分(如果用户已经在共享页面上),并且将用户发送到共享视图(如果用户当前不在那里)。

问题是,在我转到sahre页,然后返回到另一页后,函数share()在shareCtrl中引用了该函数,而不是metaCtrl。

最佳答案

我不确定这里是否有足够的信息,但我会试一试(我没有评论,因为我没有足够的代表)。请注意,您的shareCtrl并未创建新的模型对象,您只是分配了$ scope.model.share = func...。

该分配将覆盖父控制器中的功能,因为Angular会在作用域链中向上查找模型对象。

看到这个柱塞:
http://plnkr.co/edit/yv5rrpdlkniZdg94T4Lf

注意,在$ shareCtrl中用$ scope.model = {}注释掉了,两个字段的值都是“ shareCtrl”。但是,如果取消注释该行,则$ scope.model处于shareCtrl范围内,因此Angular不会沿范围链查找。

08-05 15:58