Оператор присваивания выполняет присваивание только один раз, когда служба $ compile создает контроллер. Операция присваивания должна выполняться каждый раз, когда изменяется эталонное значение.
Чтобы избежать необходимости выполнять новое присвоение, используйте angular.copy
, чтобы обновить содержимое существующей ссылки:
myApp.controller('Controller', ['$scope', '$timeout', function($scope, $timeout) {
$scope.vartext = ["foo"];
̶$̶t̶i̶m̶e̶o̶u̶t̶(̶(̶)̶ ̶=̶>̶ ̶$̶s̶c̶o̶p̶e̶.̶v̶a̶r̶t̶e̶x̶t̶ ̶=̶ ̶[̶"̶b̶a̶r̶"̶]̶,̶ ̶3̶0̶0̶0̶)̶;̶
$timeout(() => angular.copy(["bar"], $scope.vartext), 3000);
}]);
Таким образом содержимое нового объекта копируется в существующую ссылку.
Для получения дополнительной информации см.
Другой подход заключается в использовании односторонней привязки и ловушки жизненного цикла $onChanges
для выполнения нового назначения каждый разссылка меняется:
myApp.directive("test", function() {
return {
template: '<div>{{inside[0]}}</div>',
replace: true,
scope: {
̶t̶e̶x̶t̶:̶ ̶"̶=̶"̶
text: "<"
},
controller: ['$scope', '$timeout', function($scope, $timeout) {
this.$onChanges = function(changes) {
if (changes.text) {
$scope.inside = $scope.text;
};
};
}]
}
});
При изменении ссылки, назначенной на text
, код назначает новую ссылку для свойства inside
$scope
.
Для получения дополнительной информации,см.