我有一个函数make_value_summary
,它通常会对$scope
字段进行汇总。在这里,我使用它构建location_summary
,通过ng-bind
绑定到视图。每当字段location_summary
,street
或suburb
更新时,state
都会更新。
$scope.location_summary = function() {
var fields = [
'street',
'suburb',
'state',
];
return make_value_summary(fields, $scope, 'Location?');
};
function make_value_summary(fields, $scope, initial) {
var summary = '';
fields.forEach(function(field) {
if ($scope[field] && $scope[field] !== '0') {
if (summary) {
summary = summary + ', ' + $scope[field];
}
else {
summary = $scope[field];
}
}
});
if (summary) {
return summary[0].toUpperCase() + summary.substring(1);
}
else {
return initial;
}
}
问题1:location_summary
如何动态更新,从我最初查看的代码看起来make_value_summary
只应在首次分配location_summary
时执行一次。
问题2:我想通过服务将location_summary
绑定到视图的完全不同的部分。我应该如何将location_summary
附加到服务Location
。我尝试使用$watch
但没有成功。
$scope.$watch('location_summary', function(newValue, oldValue) {
// Just gives unevaluated reference to location_summary function
console.log(newValue);
console.log(oldValue);
});
修改
通过“评估”手表中的功能获得解决方案,即将'location_summary()'
传递给$watch()
。还是想回答我的第一个问题!
答案 0 :(得分:0)
根据您的代码,请运行此代码段。
angular.module("app",[])
.controller("appController",appController);
appController.$inject=["$scope"];
function appController($scope){
$scope.location_summary = function() {
var fields = [
'street',
'suburb',
'state',
];
return make_value_summary(fields, $scope, 'Location?');
};
function make_value_summary(fields, $scope, initial) {
var summary = '';
fields.forEach(function(field) {
if ($scope[field] && $scope[field] !== '0') {
if (summary) {
summary = summary + ', ' + $scope[field];
}
else {
summary = $scope[field];
}
}
});
if (summary) {
return summary[0].toUpperCase() + summary.substring(1);
}
else {
return initial;
}
}
}

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="app" ng-controller="appController">
<input ng-model="street">
<input ng-model="suburb">
<input ng-model="state">
{{location_summary()}}
</body>
&#13;