Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 如何让ng repeat在共享$scope更改时重新渲染?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何让ng repeat在共享$scope更改时重新渲染?

Javascript 如何让ng repeat在共享$scope更改时重新渲染?,javascript,angularjs,Javascript,Angularjs,我有三个控制器从一个包含数据的主控制器继承。我用一个函数调用表示每个ng repeat中的数组,我猜这就是列表在模型更改后不更新的原因 其他信息:为了让您了解模型,主题嵌套在组中,规则嵌套在主题中。因此,当我选择一个组时,我只想显示该组的主题,当我选择一个主题时,我只想显示该主题的规则 知道为什么当选定的组/主题更改时列表不会重新呈现吗 (选定的类会在单击时更新,因此我知道它正在启动。) 以下是HTML: <div ng-controller="DataCtrl"> &l

我有三个控制器从一个包含数据的主控制器继承。我用一个函数调用表示每个ng repeat中的数组,我猜这就是列表在模型更改后不更新的原因

其他信息:为了让您了解模型,主题嵌套在组中,规则嵌套在主题中。因此,当我选择一个组时,我只想显示该组的主题,当我选择一个主题时,我只想显示该主题的规则

知道为什么当选定的组/主题更改时列表不会重新呈现吗

(选定的类会在单击时更新,因此我知道它正在启动。)

以下是HTML:

<div ng-controller="DataCtrl">


    <div ng-controller="GroupCtrl">
        <nav>
            <h4>Groups</h4>
            <ul ng-repeat="group in getGroups()">
                <li><a href="#" ng-click="selectGroup($index)"
                    ng-class="selectedGroupClass($index)">{{group.name}}</a></li>
            </ul>
        </nav>

    </div>

    <div ng-controller="TopicCtrl">

        <ul ng-repeat="topic in getTopics()">
            <li><a href="" ng-click="selectTopic($index)"
                ng-class="selectedTopicClass($index)">{{topic.name}}</a></li>
        </ul>


    </div>
    <div ng-controller="RuleCtrl">

        <ul ng-repeat="rule in getRules()">
            <li ng-click="selectRule($index)"
                ng-class="selectedRuleClass($index)">{{rule.text}}</li>
        </ul>

    </div>


</div>




</div>

您正在覆盖子控制器中的绑定,这可以通过将范围变量放入对象中轻松解决。确保修复你的参考资料,它就会工作

$scope.my={selectedGroup:0,selectedTopic:0,selectedRule:0}


干杯

您正在覆盖子控制器中的绑定,通过将范围变量放入对象中可以轻松解决此问题。确保修复你的参考资料,它就会工作

$scope.my={selectedGroup:0,selectedTopic:0,selectedRule:0}


干杯

您正在覆盖子控制器中的绑定,通过将范围变量放入对象中可以轻松解决此问题。确保修复你的参考资料,它就会工作

$scope.my={selectedGroup:0,selectedTopic:0,selectedRule:0}


干杯

您正在覆盖子控制器中的绑定,通过将范围变量放入对象中可以轻松解决此问题。确保修复你的参考资料,它就会工作

$scope.my={selectedGroup:0,selectedTopic:0,selectedRule:0}


干杯

Dan Doyon在实际问题上击败了我,但我想补充以下内容

您将控制器用作数据控制器的想法并不是真正的角度方式:控制器是大多数视图控制器。在您的情况下,我会将DataCtrl重写为服务,并在需要时将其注入(视图)控制器中。这允许您将$scope变量绑定到服务变量,以保持所有内容的更新

app.controller('MyCtrl', ['$scope', 'DataService', function ($scope, DataService) {
    $scope.varThatNeedsData = DataService.data;
}]);

// Init is intended to be used for the resolve property in the $routeProvider. 
app.service('DataService', ['$http', function ($http) {
    var self = this;
    self.data = {};

    self.init = function () {
        var deferred = $q.defer();
        $http.get('data/url').then(function (response) {
            self.data = response.data;
            deferred.resolve();
        });
        return deferred.promise();
    };

    return self;
}]);

Dan Doyon在实际问题上击败了我,但我想补充以下内容

您将控制器用作数据控制器的想法并不是真正的角度方式:控制器是大多数视图控制器。在您的情况下,我会将DataCtrl重写为服务,并在需要时将其注入(视图)控制器中。这允许您将$scope变量绑定到服务变量,以保持所有内容的更新

app.controller('MyCtrl', ['$scope', 'DataService', function ($scope, DataService) {
    $scope.varThatNeedsData = DataService.data;
}]);

// Init is intended to be used for the resolve property in the $routeProvider. 
app.service('DataService', ['$http', function ($http) {
    var self = this;
    self.data = {};

    self.init = function () {
        var deferred = $q.defer();
        $http.get('data/url').then(function (response) {
            self.data = response.data;
            deferred.resolve();
        });
        return deferred.promise();
    };

    return self;
}]);

Dan Doyon在实际问题上击败了我,但我想补充以下内容

您将控制器用作数据控制器的想法并不是真正的角度方式:控制器是大多数视图控制器。在您的情况下,我会将DataCtrl重写为服务,并在需要时将其注入(视图)控制器中。这允许您将$scope变量绑定到服务变量,以保持所有内容的更新

app.controller('MyCtrl', ['$scope', 'DataService', function ($scope, DataService) {
    $scope.varThatNeedsData = DataService.data;
}]);

// Init is intended to be used for the resolve property in the $routeProvider. 
app.service('DataService', ['$http', function ($http) {
    var self = this;
    self.data = {};

    self.init = function () {
        var deferred = $q.defer();
        $http.get('data/url').then(function (response) {
            self.data = response.data;
            deferred.resolve();
        });
        return deferred.promise();
    };

    return self;
}]);

Dan Doyon在实际问题上击败了我,但我想补充以下内容

您将控制器用作数据控制器的想法并不是真正的角度方式:控制器是大多数视图控制器。在您的情况下,我会将DataCtrl重写为服务,并在需要时将其注入(视图)控制器中。这允许您将$scope变量绑定到服务变量,以保持所有内容的更新

app.controller('MyCtrl', ['$scope', 'DataService', function ($scope, DataService) {
    $scope.varThatNeedsData = DataService.data;
}]);

// Init is intended to be used for the resolve property in the $routeProvider. 
app.service('DataService', ['$http', function ($http) {
    var self = this;
    self.data = {};

    self.init = function () {
        var deferred = $q.defer();
        $http.get('data/url').then(function (response) {
            self.data = response.data;
            deferred.resolve();
        });
        return deferred.promise();
    };

    return self;
}]);

可能函数没有被重新计算,因为函数调用中没有参数更改。尝试将索引作为参数传递。例如:
ng repeat=“getRules中的规则(selectedGroup,selectedTopic)”
可能函数没有重新求值,因为函数调用中没有参数更改。尝试将索引作为参数传递。例如:
ng repeat=“getRules中的规则(selectedGroup,selectedTopic)”
可能函数没有重新求值,因为函数调用中没有参数更改。尝试将索引作为参数传递。例如:
ng repeat=“getRules中的规则(selectedGroup,selectedTopic)”
可能函数没有重新求值,因为函数调用中没有参数更改。尝试将索引作为参数传递。例如:
ng repeat=“getRules中的规则(selectedGroup,selectedTopic)”
ah!就这样!我只是把这当作一个常见的问题来读,但并没有把二和二放在一起。谢谢啊!!就这样!我只是把这当作一个常见的问题来读,但并没有把二和二放在一起。谢谢啊!!就这样!我只是把这当作一个常见的问题来读,但并没有把二和二放在一起。谢谢啊!!就这样!我只是把这当作一个常见的问题来读,但并没有把二和二放在一起。谢谢尽管丹是对的,但我还是要为他如此乐于助人而投票。谢谢你的提示。使用控制器拉入数据总是让人觉得有点奇怪。@KG Christensen关于提供服务的问题,你完全正确,我有点懒,只解决核心问题。尽管丹是对的,但他还是为自己的帮助而投票。谢谢你的提示。使用控制器拉入数据总是让人觉得有点奇怪。@KG Christensen关于提供服务的问题,你完全正确,我有点懒,只解决核心问题。尽管丹是对的,但他还是为自己的帮助而投票。谢谢你的提示。使用控制器拉入数据总是让人觉得有点奇怪。@KG Christensen关于提供服务的问题,你完全正确,我有点懒,只解决核心问题。尽管丹是对的,但他还是为自己的帮助而投票。谢谢你的提示。它总是让人感觉到一种痛苦