J'ai ce module routes:
var mainModule = angular.module('lpConnect', []).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/home', {template:'views/home.html', controller:HomeCtrl}).
when('/admin', {template:'views/admin.html', controller:AdminCtrl}).
otherwise({redirectTo:'/connect'});
}]);
HTML d'accueil:
<div ng-include src="views.partial1"></div>
partial1
HTML:
<form ng-submit="addLine()">
<input type="text" ng-model="lineText" size="30" placeholder="Type your message here">
</form>
HomeCtrl
:
function HomeCtrl($scope, $location, $window, $http, Common) {
...
$scope.views = {
partial1:"views/partial1.html"
};
$scope.addLine = function () {
$scope.chat.addLine($scope.lineText);
$scope.lines.push({text:$scope.lineText});
$scope.lineText = "";
};
...
}
Dans la addLine
fonction $scope.lineText
est undefined
, cela peut être résolu en ajoutant ng-controller="HomeCtrl"
à partial1.html
, mais cela provoque l'appel du contrôleur deux fois. Qu'est-ce que j'oublie ici?
la source
$parent.$parent...
pour le faire fonctionner. En d'autres termes, l'utilisation$parent
fait des hypothèses sur la structure DOM.Au lieu d'utiliser
this
comme le suggère la réponse acceptée, utilisez$parent
plutôt. Donc dans votrepartial1.html
vous aurez:Si vous souhaitez en savoir plus sur la portée dans
ng-include
ou sur d'autres directives, consultez ceci: https://github.com/angular/angular.js/wiki/Understanding-Scopes#ng-includela source
$scope.$parent
au lieu de$parent
n'est pas défini selon Angular.$scope.$parent
qui fonctionne pour moi en angulaire 1.3.20J'ai compris comment contourner ce problème sans mélanger les données parent et sous-étendue. Définissez un
ng-if
sur l'ng-include
élément et définissez-le sur une variable de portée. Par exemple :Dans votre contrôleur, lorsque vous avez défini toutes les données dont vous avez besoin dans votre sous-étendue, définissez show sur
true
. Leng-include
copiera à ce moment l'ensemble de données dans votre étendue et le placera dans votre sous-étendue.La règle d'or est de réduire les données de portée plus profondément, sinon vous avez cette situation.
Max
la source