所以我有一个控制器和指令。我无法理解为什么我的控制器在我的指令之后运行。我已经搜索堆栈试图找到答案,但似乎大多数答案都是个案。
我的控制器最简单的形式就是这样
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 然后运行控制器。
谢谢您的帮助