gpt4 book ai didi

javascript - AngularJS对Controller和rootScope的多种使用

转载 作者:行者123 更新时间:2023-12-03 08:13:39 24 4
gpt4 key购买 nike

我想在 2 个单独的 HTML 元素上使用 Controller ,并在编辑一个列表时使用 $rootScope 使 2 个列表保持同步:

HTML

<ul class="nav" ng-controller="Menu">
<li ng-repeat="item in menu">
<a href="{{item.href}}">{{item.title}}</a>
</li>
</ul>

<div ng-controller="Menu">
<input type="text" id="newItem" value="" />
<input type="submit" ng-click="addItem()" />
<ul class="nav" ng-controller="Menu">
<li ng-repeat="item in menu">
<a href="{{item.href}}">{{item.title}}</a>
</li>
</ul>
</div>

JS
angular.module('menuApp', ['menuServices']).
run(function($rootScope){
$rootScope.menu = [];
});

angular.module('menuServices', ['ngResource']).
factory('MenuData', function ($resource) {
return $resource(
'/tool/menu.cfc',
{
returnFormat: 'json'
},
{
getMenu: {
method: 'GET',
params: {method: 'getMenu'}
},
addItem: {
method: 'GET',
params: {method: 'addItem'}
}
}
);
});

function Menu($scope, MenuData) {

// attempt to add new item
$scope.addNewItem = function(){
var thisItem = $('#newItem').val();

MenuData.addItem({item: thisItem},function(data){
$scope.updateMenu();
});
}

$scope.updateMenu = function() {
MenuData.getMenu({},function(data){
$scope.menu = data.MENU;
});
}

// get menu data
$scope.updateMenu();
}

当页面加载时, ULDIV显示数据库中的正确内容,但是当我使用 addNewItem()仅方法 DIV得到更新。

有没有更好的方法来构建我的逻辑,或者我可以做些什么来确保 $scope.menuUL同时更新?

这是一个类似的例子: http://plnkr.co/edit/2a55gq

最佳答案

我建议使用保存菜单及其方法的服务。该服务将更新 Controller 引用的菜单。

在此处查看工作人员:http://plnkr.co/edit/Bzjruq

这是示例 JavaScript 代码:

angular
.module( 'sampleApp', [] )
.service( 'MenuService', [ '$rootScope', function( $rootScope ) {

return {
menu: [ 'item 1' ],
add: function( item ) {
this.menu.push( item );
}
};

}])
.controller( 'ControllerA', [ 'MenuService', '$scope', function( MenuService, $scope ) {

$scope.menu = MenuService.menu;

$scope.addItem = function() {
MenuService.add( $scope.newItem );
};

}]);

以及示例 Html 页面:
<!DOCTYPE html>
<html>

<head lang="en">
<meta charset="utf-8">
<title>Custom Plunker</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
<script src="app.js"></script>
</head>

<body ng-app="sampleApp">

<div ng-controller="ControllerA">
<ul>
<li ng-repeat="item in menu">{{item}}</li>
</ul>
<input type="text" ng-model="newItem" /><input type="submit" ng-click="addItem()" />
</div>

<div ng-controller="ControllerA">
<ul>
<li ng-repeat="item in menu">{{item}}</li>
</ul>
</div>

</body>

</html>

关于javascript - AngularJS对Controller和rootScope的多种使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180293/

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