gpt4 book ai didi

javascript - 使用 ng-view 时 AngularJS 数组不更新

转载 作者:行者123 更新时间:2023-12-03 00:21:51 28 4
gpt4 key购买 nike

我正在学习如何使用 ngRoute 将我的 html 表单拆分为单独的 View 。当我将数据添加到 index.html 中的主数组时,数组会正确更新,但是当我在通过 ng-view 添加的 html 表单中尝试相同的方法时,数组无法正确呈现。我可以调试并看到数组正在添加新名称,但它不会在 html 上呈现。

索引.html

<h1> Names </h1>

<ul ng-repeat="name in names">
<li>{{name.fname}}</li>
</ul>

<h1>Add name in index.html</h1>
<input type="text" ng-model="name" />
<button ng-click="addName(name)">add name</button>

<ul>
<li><a href="#/first"> First</a></li>
<li><a href="#/second"> Second</a></li>
</ul>

<div class="container">
<div ng-view></div>
</div>

Apps.js

var myApp = angular.module('myApp', ['ngRoute']);

myApp.config(function ($routeProvider) {
$routeProvider
.when('/first', {
templateUrl: 'pages/first.html',
controller: 'mainController'
})

.when('/second', {
templateUrl: 'pages/second.html',
controller: 'mainController'
})

});

myApp.controller('mainController', ['$scope', '$log', function($scope, $log) {
$scope.names = [{fname:'john',lname:'doe'},{fname:'jane',lname:'doe'}];

$scope.addName = function(name){
$scope.names.push({fname:name,lname:'no last name'});
}
}]);

first 和 secondary.html 相同

<h1>Add name in first.html</h1>
<input type="text" ng-model="name" />
<button ng-click="addName(name)">add name</button>

enter image description here

最佳答案

这是设计使然。

$scope 仅限于 Controller 的范围,即 ng-view 内渲染的所有内容。这意味着有两个名为 names 的集合,一个在应用程序范围内,一个在 Controller 范围内。当您修改 Controller 内的 names 集合时,它只会修改此集合,而不是应用程序根级别中引用的集合。 (我假设您将 mainController 绑定(bind)到 body 标记,否则 index.html 中的 addName() 将无法工作。这本身并不是一个很好的选择,您不应该放置另一个 Controller 实例除非你绝对知道自己在做什么。)

处理这种情况的正确方法是将 names 集合和 addName() 函数放入注入(inject) Controller 的服务中。

关于javascript - 使用 ng-view 时 AngularJS 数组不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54278603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com