だから私はコントローラーとディレクティブを持っています。コントローラーがディレクティブの後に実行される理由を理解できません。答えを見つけようとしてスタックを精査しましたが、ほとんどの答えはケースバイケースのようです。
最も単純な形の私のコントローラはそうです
app.controller('MyCtrl', ['$scope', function ($scope){
$scope.initAddress = {
place_id: "",
geometry: {
location: {
A: "",
F: ""
}
},
}
$scope.gotoLocation = function (placeId) {
$scope.initAddress = {
place_id: "placeId",
geometry: {
location: {
A: placeId.geometry.location.lat(),
F: placeId.geometry.location.lng()
}
}
}};}]);
ng-click ボタンをクリックすると、gotoLocation スコープ関数に移動し、$scope.initAddress を再定義します。私のHTMLは次のとおりです。
<div class="row">
<my-map address="initAddress"></my-map>
</div>
<div ng-repeat="place in placelistData.placeList">
<button ng-click="gotoLocation(place.id)">{{place.id}}</button>
</div>
ディレクティブを見ると、使用しています
.directive('myMap', function () {
return {
restrict: 'E',
replace: true,
scope: {
address: '=?',
},
template: '<div class="dp-places-map-wrapper"><input type="text" class="dp-places-map-input"><div class="dp-places-map-canvas"></div></div>',
link: function (scope, element, attrs) {
scope.$watch('address', function () {
if (map && scope.address)
map.setCenter(getLocation(scope.address));
});
}
現在、ボタンをクリックすると、コントローラーと $scopes.initAddress に実行され、$scope.watch にはヒットしません。もう一度クリックすると、最初に $scope.watch にヒットし、次にコントローラーに移動し、それに応じて更新されます。前にコントローラーにヒットし、次に $scope.watch がコントローラーの変更をキャッチするように変更するにはどうすればよいですか。最初に $scope.watch を実行してからコントローラーを実行するのではなく。
助けてくれてありがとう