Mam ten moduł tras:
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'});
}]);
Domowy HTML:
<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 = "";
};
...
}
W addLine
funkcja $scope.lineText
jest undefined
, to może być rozwiązany poprzez dodanie ng-controller="HomeCtrl"
do partial1.html
, powoduje to jednak kontroler na miano dwukrotnie. Czego tu brakuje?
źródło
$parent.$parent...
go, aby działał. Innymi słowy, za pomocą$parent
przyjmuje się założenia dotyczące struktury DOM.Zamiast używać
this
zgodnie z sugerowaną odpowiedzią, użyj$parent
zamiast tego. Więc w twoimpartial1.html
będziesz miał:Jeśli chcesz dowiedzieć się więcej o zakresie
ng-include
lub innych dyrektywach, sprawdź to: https://github.com/angular/angular.js/wiki/Understanding-Scopes#ng-includeźródło
$scope.$parent
zamiast$parent
niezdefiniowany według Angulara.$scope.$parent
działa dla mnie w kanciastym 1.3.20Zrozumiałem, jak obejść ten problem bez mieszania danych rodzica i podzakresu. Ustaw a
ng-if
nang-include
elemencie i ustaw zmienną zasięgu. Na przykład :W swoim kontrolerze, po ustawieniu wszystkich potrzebnych danych w swoim zakresie podrzędnym, ustaw opcję show na
true
. Wng-include
tym momencie skopiuje zestaw danych w twoim zakresie i ustawi go w twoim zakresie podrzędnym.Zasadą jest ograniczenie danych zakresu głębiej, w przeciwnym razie masz taką sytuację.
Max
źródło