gpt4 book ai didi

javascript - 如何将 Angular 中的 rootScope 更改为 Service?

转载 作者:行者123 更新时间:2023-12-03 08:02:38 26 4
gpt4 key购买 nike

我是 Angular 新手,仍在学习中。

这是sample fiddle

我想知道如何将其转换为服务?我发现在 NavControllerHeaderController 上同时编写 setStatus 似乎很错误,有没有更好的方法来解决这个问题?

场景

当用户点击close按钮时,整个带背景的nav将不会显示,而当用户点击menu按钮时,nav将获得一个is-active类,它使nav显示 block 。

JS

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

app.controller('NavController', function($rootScope, $scope) {
$rootScope.status = 'off';
this.setStatus = function(status) {
$rootScope.status = status;
};
});

app.controller('HeaderController', function($rootScope, $scope) {
this.setStatus = function(status) {
$rootScope.status = status;
};
});

DOM

<div ng-app="myapp">
<nav ng-controller="NavController as nav" ng-class="{ 'is-active': status == 'on' }" ng-init="nav.status" class="nav">
<div class="nav__wrapper">
<button ng-click="nav.setStatus('off')" class="nav__close">close</button>
</div>
</nav>

<header ng-controller="HeaderController as header">
<button ng-click="header.setStatus('on')">menu</button>
</header>
</div>

任何帮助将不胜感激,谢谢!

最佳答案

有几个原因导致了 JSFiddle 上的问题

  • 正在加载 Angular js 库 onload它在模块 myapp 之前解析脚本已定义,因此 LoadType JSFiddle 上应该是 No Wrap-in<body>
  • 在 JSFiddle 中转储的样式需要是 RAW CSS,而不是 less/sass,因为 JSFIddle 不会将它们解析为 CSS。

我纠正了这些问题并且您的 JSFiddle 工作顺利;)

Running JSFiddle link

现在,关于将公共(public)/可共享数据移动到工厂/服务的实际问题是通过创建如下所示的简单工厂模块并引用所有 Controller 来实现的

JS 代码:

myApp.factory('Data', function () {
return { FirstName: '' };
});

myApp.controller('FirstCtrl', function ($scope, Data) {
$scope.Data = Data;
});

myApp.controller('SecondCtrl', function ($scope, Data) {
$scope.Data = Data;
});

HTML 代码:

<div ng-controller="FirstCtrl">
<input type="text" ng-model="Data.FirstName">
<br>Input is : <strong>{{Data.FirstName}}</strong>
</div>
<hr>
<div ng-controller="SecondCtrl">
Input should also be here: {{Data.FirstName}}
</div>

Live Demo using factory/service @ JSFiddle

注意:使用 $rootScope像在当前代码中一样定义全局对象本身是一种不错的做事方式,但无论如何可以使用定义新的 factory 来实现相同的目的。像上面的模块。

引用文献:

关于javascript - 如何将 Angular 中的 rootScope 更改为 Service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528393/

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