我的index.html看起来像这样:
<div id="div1" ng-controller="StartMenu">
<div id="button1" ng-click="doSomething()"></div>
{{value}}
</div>
<div id="div2" ng-view></div>模块配置:
angular.module('app').config([$routeProvider, function($routeProvider) {
$routeProvider.when('/start', {
templateUrl: 'partials/start.html', controller: StartMenu
});
}]);start.html:
<div id="button2" ng-click="doSomething()"></div>
{{value}}function StartMenu($scope, globals) { // service globals defined elsewhere
$scope.value = globals.value
$scope.doSomething = function() {
// Manipulate globals.value
$scope.value = globals.value;
}
}问题: index.html中的这两个div元素共享相同的控制器功能。当我点击#div1中的#button1时,doSomething被调用并且$scope.value被改变。更改立即呈现在#div1和{{value}}更改中,但#div2保持不变。如何“强制”#div2呈现并显示{{value}}中的更改?
发布于 2013-01-15 04:38:48
ng-view创建自己的(子)作用域,因此start.html中的{{value}}是在子作用域上创建的。此value属性在父作用域中隐藏/隐藏同名属性。有几种可能的解决方案:
有关范围继承的更多信息,请参见What are the nuances of scope prototypal / prototypical inheritance in AngularJS?
我读太快了.div1中不包含div2。这个问题是双重的:
value属性如果globals.value是基元,则控制器作用域将获得值的副本,而不是引用。上面的解决方案2和3适用于这里。
3=使用控制器中的函数访问全局原始值。两种解决方案的小提琴都在下面的评论中。
发布于 2015-10-22 15:16:24
在这种情况下,您可以将值传递给服务并从服务中获取它
// controller
yourservicename.yourfunction = 'somthing text';
$scope.getvalue = function() {
return yourservicename.yourfunction;
}
// view
<div ng-controller="myCtrl" > {{getvalue()}} </div>
<div ng-controller="myCtrl" > {{getvalue()}} </div>https://stackoverflow.com/questions/14325919
复制相似问题