route - otherwise angularjs
Directiva angularjs no reacciona al cambio de atributo (1)
Es difícil de decir sin ver el resto del código del controlador de chat
, pero es posible que necesite un $watch
dentro de su controlador de chat como:
$scope.$watch(''chatID'', function(newValue, oldValue) {
// run some code here whenever chatID changes
});
EDITAR: para obtener más información sobre el bucle $digest
y las operaciones de tiempo de ejecución de Angular, consulte esta Guía de AngularJS . (Verifique la sección Runtime)
Para obtener más información sobre los controladores, consulte esta guía de AngularJS: Understanding Controllers . Estos son los puntos clave relevantes para su pregunta:
Los controladores deben usarse solo para:
- Configure el estado inicial de un objeto de ámbito.
- Agregue comportamiento al objeto de alcance. (para incluir la creación de
$watch
, etc.)
El ciclo de $digest
procesa solo:
- la cola
$evalAsync
- la lista de
$watch
Tengo una directiva de chat que uso para colocar una sala de chat en la página.
mod.directive(''chat'', function () {
return {
templateUrl: ''/chat'',
replace: true,
scope: {
chatID:''@chat'',
},
controller: function ($scope, $element, $timeout) {
var id = $scope.chatID
...
},
link: function ...
}
})
HTML se ve así:
<div class="chat" chat="{{currentChatID}}" ui-view="currentChat"></div>
<div class="content" ui-view="mainContent"></div>
Esto está en un archivo llamado "estándar"
mod.config(function($stateProvider) {
$stateProvider.state(''standard'', {
views: {
''main'': {
templateUrl: ''/tmpl/standard'',
controller: function($scope, $timeout) {
$scope.currentChatID = ''''
$scope.setCurrentChatID = function(newID) {
$scope.currentChatID = newID
}
}
}
}
})
})
Estoy usando angularjs-ui-router para crear una vista principal con la directiva de chat que proporciona un chat dentro de esa vista. Esto funciona bien en la carga de la primera página, el chat se carga. Pero cuando cambio la página / sala de chat, uso otro controlador para ejecutar setCurrentChatID()
. Esto cambia el currentChatID
para el elemento de chat en el DOM, también veo que las propiedades del elemento de chat cambian a la nueva ID en angularjs-batarang, pero los controladores de la directiva de chat no se ejecutan. ¿Cómo hago para que esto funcione correctamente / active los controladores del chat cuando el chatID cambia?
Gracias.