在Angular的dom元素上使用两次ng-controller
Using ng-controller twice on dom elements in Angular
我必须在两个dom元素上使用相同的控制器。我了解到在两个元素上使用ng-controller将实例化两个实例。我必须在这两个实例之间共享一个变量。我所做的就是创建一个服务并在控制器中分配watch来观察服务中的变量
但是我没有看到第二个控制器得到更新。
下面是我试图让它工作的jsfiddle链接。
http://jsfiddle.net/jnj6y/251/JS代码:
var myModule = angular.module('myModule', []);
myModule.controller('mainCtrler',function($scope){
// $scope.dummy="main"
});
myModule.controller('SFCtrler',function($scope,highlightService) {
$scope.dummy="hi";
$scope.submit = function(){
highlightService.setDummy("howdy");
$scope.dummy=highlightService.getDummy();
};
$scope.$watch(function () {highlightService.getDummy(); },function(newVal, oldVal) {
alert(highlightService.getDummy());
$scope.dummy=highlightService.getDummy();
},
true);
});
myModule.service('highlightService', function() {
var dummy ='default';
var setDummy = function(input){
dummy = input;
}
var getDummy = function(){
return dummy;
}
return {
setDummy: setDummy,
getDummy: getDummy
};
});
HTML代码:<div ng-controller="mainCtrler">
<div ng-controller="SFCtrler" >
<p>{{dummy}}</p>
<form id='sf' ng-submit="submit();" >
<input ng-model="SearchTerm" placeholder="Search current record" type="text" >
</form>
</div>
<div ng-controller="SFCtrler" >
<p>{{dummy}}</p>
</div>
</div>
你们能指出我缺少什么吗
function () {highlightService.getDummy(); }
应为:
function() {
return highlightService.getDummy();
}
需要返回一个值给$scope.$watch
完整更新的监视程序代码:
$scope.$watch(function () {
return highlightService.getDummy();
}, function(newVal, oldVal) {
$scope.dummy = newVal;
}, true);
我已经更新了您的jsfiddle: http://jsfiddle.net/zwa3s77c/您不希望使用原始变量作为作用域变量。
var myModule = angular.module('myModule', []);
myModule.controller('mainCtrler',function($scope){
});
myModule.controller('SFCtrler',function($scope,highlightService) {
$scope.dummy={val: "hi"};
$scope.submit = function(){
highlightService.setDummy("howdy");
$scope.dummy=highlightService.getDummy();
};
$scope.$watch(function () {
highlightService.getDummy();
}, function(newVal, oldVal) {
alert(highlightService.getDummy().val);
$scope.dummy=highlightService.getDummy();
}, true);
});
myModule.service('highlightService', function() {
var dummy ={val:'default'};
var setDummy = function(input){
dummy.val = input;
}
var getDummy = function(){
return dummy;
}
return {
setDummy: setDummy,
getDummy: getDummy
};
});
这里有更多的参考:http://www.codelord.net/2014/05/10/understanding-angulars-magic-dont-bind-to-primitives/
相关文章:
- ng在一页中包含两次相同的部分页面
- ng单击需要两次才能更新视图
- AngularJS ng风格的跑步两次
- Angular JS:使用ng重复计算每行两次之间的差
- ng标记输入,不允许在文本框中输入两次相同的文本
- 新指令导致NG改变两次触发
- ng 类指令调用执行两次
- ng-重复运行两次(角度)
- 递归自定义树视图 angularjs 指令调用 ng 单击两次
- 控制器函数使用 ng-show 调用两次
- 不能在ng类上重复两次相同的条件
- AngularJS在一个表中使用ng重复两次
- 避免运行Angular Controller两次/Ajax调用
- 在Angular的dom元素上使用两次ng-controller
- Mobilefirst Ionic ng启动应用程序点击两次
- 为什么使用ng-model两次输入字段工作?
- 所有的ng-click事件都触发两次
- 如何从两次或三次嵌套的ng-repeat作用域访问控制器的作用域
- Angular指令编译器触发了两次ng-click
- Angular JS控制器被调用两次(ng-controller)