2016-07-23 6 views
0

私は$scopeフィールドの概要を総称して関数make_value_summaryを持っています。ここではlocation_summaryを構築するためにそれを使用しており、ビューにはng-bindを介してバインドされています。フィールドstreet,suburb、またはstateが更新されるたびにlocation_summaryが更新されます。

$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が最初に割り当てられているとき、どのようlocation_summaryが動的に更新さん、それはmake_value_summaryのようなコードでの私の最初の表情からは、一度だけ実行する必要があります。

質問2:location_summaryをサービスを通じてビューの全く異なる部分にバインドしたいとします。サービスLocationlocation_summaryをつけてどうすればいいですか?私は$watchを使ってみましたが、成功しませんでした。

$scope.$watch('location_summary', function(newValue, oldValue) { 
    // Just gives unevaluated reference to location_summary function 
    console.log(newValue); 
    console.log(oldValue); 
}); 

EDITは、時計の '評価する' 機能、すなわち$watch()'location_summary()'に渡すことによって2へ溶液を得ました。まだ私の最初の質問への答えが欲しいです!

答えて

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>

関連する問題