Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS,通过引用更新子控制器视图中的ng repeat_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS,通过引用更新子控制器视图中的ng repeat

Javascript AngularJS,通过引用更新子控制器视图中的ng repeat,javascript,angularjs,Javascript,Angularjs,我有一个子控制器,它引用来自其父控制器的值 问题是:更新父控制器值时,子控制器视图中的ng repeat未更新 所以我的问题是:当父控制器值被更新而子控制器值被引用时,如何更新子控制器ng 子控制器: angular.module('angularApp').controller('PostController', function ($scope) { $scope.mainController = $scope.$parent.getMainController(); $s

我有一个子控制器,它引用来自其父控制器的值

问题是:更新父控制器值时,子控制器视图中的ng repeat未更新

所以我的问题是:当父控制器值被更新而子控制器值被引用时,如何更新子控制器ng

子控制器:

angular.module('angularApp').controller('PostController', function ($scope) 
{
    $scope.mainController = $scope.$parent.getMainController();
    $scope.editController = $scope.$parent;
    $scope.posts = $scope.mainController.currentStation.posts;
    $scope.featuredAlbums = $scope.$parent.featuredAlbums;

    $scope.updatePost = function(postId){
        $scope.editController.updatePost(postId);
    };

    $scope.updateFeatured = function(featuredId){
        $scope.editController.updateFeatured(featuredId);
    };
});
http://plnkr.co/edit/GKjYAWEEWOrp84bwIIOt?p=info
ng在子控制器下重复

<div ng-controller="PostController" class="posts">
<div ng-repeat="featuredAlbum in featuredAlbums">
**答案**

感谢快速响应人员,我意识到控制器中创建的所有内容都是通过值传递的,而不是引用,甚至从父控制器引用的值也会被重新创建为本地范围的控制器值

那么解决方案呢?简单

直接调用父级,而不是重新创建本地范围的变量


我不确定我是否正确理解了你的问题。所以我创建了一个包含两个控制器的plunker。在我看来,子值总是更新的。你能告诉我们你最初的问题是如何关联的吗

`http://plnkr.co/edit/9aHqdbbIe5aGJSuHogPA?p=preview`

我不确定我是否正确理解了你的问题。所以我创建了一个包含两个控制器的plunker。在我看来,子值总是更新的。你能告诉我们你最初的问题是如何关联的吗

`http://plnkr.co/edit/9aHqdbbIe5aGJSuHogPA?p=preview`

我不确定我是否正确理解了你的问题。所以我创建了一个包含两个控制器的plunker。在我看来,子值总是更新的。你能告诉我们你最初的问题是如何关联的吗

`http://plnkr.co/edit/9aHqdbbIe5aGJSuHogPA?p=preview`

我不确定我是否正确理解了你的问题。所以我创建了一个包含两个控制器的plunker。在我看来,子值总是更新的。你能告诉我们你最初的问题是如何关联的吗

`http://plnkr.co/edit/9aHqdbbIe5aGJSuHogPA?p=preview`

发生的情况是,您正在子范围中获取数据的新副本,而父范围未更新

使其工作的最简单方法是不存储任何需要子控制器直接在父作用域上访问的对象。您将拥有更少的代码和更少的复杂性

在您的情况下,在家长中,您可以选择:

$scope.media = {
    featuredAlbums : [ ... ],
    currentStation : {
        posts : {...}
    }
}
$scope.functions = {
    updatePost : function (pid) {
        // your function
    },
    updateFeatured : function (pid) {
        // your function
    }
}
在子类中,不要为所有继承而烦恼,直接调用函数即可:

$scope.functions.updatedFeatured(featureID);
$scope.functions.updatePost(postId);
无论您的函数和数据位于哪个父控制器中,如果您附加到控制器的属性,而不是控制器本身,它都会找到它们

请看这段视频,它能更好地解释这一点

编辑


正如David Beech所指出的,不需要在属性中存储父作用域函数,因为函数没有被修改。但是,这种方法是一种简单的规则,它可以工作,而不需要额外考虑哪些数据/函数是只读的,哪些是可写的。

发生的情况是,您在子作用域中获得了数据的新副本,而父作用域没有更新

使其工作的最简单方法是不存储任何需要子控制器直接在父作用域上访问的对象。您将拥有更少的代码和更少的复杂性

在您的情况下,在家长中,您可以选择:

$scope.media = {
    featuredAlbums : [ ... ],
    currentStation : {
        posts : {...}
    }
}
$scope.functions = {
    updatePost : function (pid) {
        // your function
    },
    updateFeatured : function (pid) {
        // your function
    }
}
在子类中,不要为所有继承而烦恼,直接调用函数即可:

$scope.functions.updatedFeatured(featureID);
$scope.functions.updatePost(postId);
无论您的函数和数据位于哪个父控制器中,如果您附加到控制器的属性,而不是控制器本身,它都会找到它们

请看这段视频,它能更好地解释这一点

编辑


正如David Beech所指出的,不需要在属性中存储父作用域函数,因为函数没有被修改。但是,这种方法是一种简单的规则,它可以工作,而不需要额外考虑哪些数据/函数是只读的,哪些是可写的。

发生的情况是,您在子作用域中获得了数据的新副本,而父作用域没有更新

使其工作的最简单方法是不存储任何需要子控制器直接在父作用域上访问的对象。您将拥有更少的代码和更少的复杂性

在您的情况下,在家长中,您可以选择:

$scope.media = {
    featuredAlbums : [ ... ],
    currentStation : {
        posts : {...}
    }
}
$scope.functions = {
    updatePost : function (pid) {
        // your function
    },
    updateFeatured : function (pid) {
        // your function
    }
}
在子类中,不要为所有继承而烦恼,直接调用函数即可:

$scope.functions.updatedFeatured(featureID);
$scope.functions.updatePost(postId);
无论您的函数和数据位于哪个父控制器中,如果您附加到控制器的属性,而不是控制器本身,它都会找到它们

请看这段视频,它能更好地解释这一点

编辑


正如David Beech所指出的,不需要在属性中存储父作用域函数,因为函数没有被修改。但是,这种方法是一种简单的规则,它可以工作,而不需要额外考虑哪些数据/函数是只读的,哪些是可写的。

发生的情况是,您在子作用域中获得了数据的新副本,而父作用域没有更新

使其工作的最简单方法是不存储任何需要子控制器直接在父作用域上访问的对象。您将拥有更少的代码和更少的复杂性

在您的情况下,在家长中,您可以选择:

$scope.media = {
    featuredAlbums : [ ... ],
    currentStation : {
        posts : {...}
    }
}
$scope.functions = {
    updatePost : function (pid) {
        // your function
    },
    updateFeatured : function (pid) {
        // your function
    }
}
在子类中,不要为所有继承而烦恼,直接调用函数即可:

$scope.functions.updatedFeatured(featureID);
$scope.functions.updatePost(postId);
无论您的函数和数据位于哪个父控制器中,如果您附加到控制器的属性,而不是控制器本身,它都会找到它们

请看这段视频,它能更好地解释这一点

编辑

正如David Beech所指出的,不需要在属性中存储父作用域函数,因为函数没有被修改。然而,这种方法是一种