gpt4 book ai didi

javascript - (Angularjs) 共享一个 Controller 的 View 之间的数据不同步

转载 作者:行者123 更新时间:2023-11-28 07:24:50 26 4
gpt4 key购买 nike

我有两个 View 共享同一个 Controller ,并使用服务在它们之间传递数据。

假设我们有 view1 和 view2,在 view2 中按下按钮应该会改变 view1 中的某些内容。

当view1收费时,存储在服务中的数据是它的$scope(如果我没有记错的话,就是 Controller 实例的$scope)。

因此,当在 view2 中按下按钮时,服务会更新 view1 的 $scope 上的某些内容。事实是,当 view1 和 view2 同时充电时,效果很好(view2 是隐藏在右侧的菜单,并且始终存在)。

但是当我切换页面(我为 view3 充电)并返回到 view1(请记住 view2 未充电)时,它将不再工作,而且感觉我的 View 不再使用相同的服务,因为当我检查两者时,数据是不同的!!

我不知道我是否解释得很好,但如果您对它不起作用的原因有一些想法,我会很高兴。这是一些代码:

我的路线:

 $routeProvider.
when('/', {
templateUrl: 'js/views/presentation.html'
}).
when('/action', {
templateUrl: 'js/views/main.html'
}).
when('/about', {
templateUrl: 'js/views/about.html'
});

在 html 中:

        <li ng-class="{active: routeIs('/')}"><a href="#/">Home</a></li>
<li ng-class="{active: routeIs('/action')}"><a href="#/action">Action</a></li>
<li ng-class="{active: routeIs('/about')}"><a href="#/about">About</a></li>

我的服务:

North.factory('urlupdate', function() {
var factory = {};
var propertyListener;

factory.setPropertyHost = function(value) {
propertyListener.host = value;
};

factory.setPropertyActionport = function(value) {
propertyListener.actionPort = value;
};

factory.setPropertyindexPort = function(value) {
propertyListener.indexPort = value;
};

factory.setPropertyserviceport = function(value) {
propertyListener.serviceport = value;
};

factory.registerForPropertyUpdate = function(listener) {
propertyListener = listener;
};

factory.getProperty = function() {
return propertyListener.host;
}

factory.getRegister = function() {
return propertyListener;
}

return factory;
});

我的 Controller 部分:

North.controller('northcontroller', ["$scope",'myService','location','urlupdate','$rootScope','$timeout',

function ($scope,myService,location,urlupdate,$rootScope,$timeout) {

$scope.begin = function(){
//some code

urlupdate.registerForPropertyUpdate($scope);
alert(urlupdate.getRegister()); // shows an object
}

function updatevariable(url, port) {
alert(urlupdate.getRegister()); // shows a different object, or even "undefined" if the main page wasn't on "view1" when it loaded.
$rootScope.host=url;
$rootScope.actionPort=9000+port;
$rootScope.indexport=9001+port;
$rootScope.serviceport=9002+port;

urlupdate.setPropertyHost($rootScope.host);
urlupdate.setPropertyActionport($rootScope.actionPort);
urlupdate.setPropertyindexPort($rootScope.indexport)
urlupdate.setPropertyserviceport($rootScope.serviceport)


}

在view2中调用函数updatevariable。

我不知道为什么在我的路线修改后它停止工作我对 angularjs 有点陌生。

我想查看我将提供的更多代码,我只是想知道我是否忘记了某些内容,或者是否有关于我错过的路由/服务/ Controller 的信息。

最佳答案

您需要做的第一件事是定义 propertyListener 对象并向其添加属性

var propertyListener = {};

关于javascript - (Angularjs) 共享一个 Controller 的 View 之间的数据不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797827/

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