Yes, thanks, I see that now. The part I did not understand was that here:
transclude(scope, function cloneLink(clone, tScope){});
'scope' is what is going to be passed to cloneLink as tScope when the
latter is invoked - see createBoundTranscludeFn() in Angular.js - which
returns transclude() AFAIK.
..as such the above use of transclude() probably does not make sense since
- given that 'scope' is the isolate scope of the directive. Using it would
deprive transcluded content from access to parent scope properties. Thus,
the right approach would instead be to use default transcluded scope,
created via proto inheritance from directive's parent:
transclude(function cloneLink(clone, tScope){});
..which in our case would be equivalent to:
transclude(scope.$parent.$new(), function cloneLink(clone, tScope){});
On Tuesday, April 22, 2014 4:29:23 AM UTC-7, Kamal wrote:
>
> Nikita,
>
> An single controller instance is created per directive (an directive can
> have more then one controller), it has noting to do with transclude. The
> `$scope` argument in your controller and `scope` argument in your `link`
> method are same as you have your controller outside your template, if its
> was inside also it depends on the value set for `scope` property while
> declaring the directive. You can check to see if the `scope` & `$scope` are
> same by `$id` property if the they match ($scope.$id === scope.$id) you
> have the same scope.
>
> Cheers,
> Kamal
>
> On Monday, 21 April 2014 23:28:20 UTC+5:30, Nikita Tovstoles wrote:
>>
>> So, fwiw I think the answers are:
>>
>> 1. there is only one NgModelController instance, and it is actually
>> at $scope.mainForm.fooForm.myInput ($scope is the one in MainCtrl)
>> 2. '$scope' inside the above NgModelController is NOT the one from
>> MainCtrl - rather it is the transcluded scope (created via prototypal
>> inheritance from MainCtrl.$scope)
>>
>> #1 makes sense; not sure I fully understand why $scope in #2 is NOT
>> MainCtrl.$scope. Could someone please explain?
>>
>> thanks,
>> -nikita
>>
>> On Sunday, April 20, 2014 9:47:44 AM UTC-7, Nikita Tovstoles wrote:
>>>
>>> Say we have a transclude directive <foo> (with iso scope) wrapping an
>>> input:
>>>
>>> <div ng-controller="MainCtrl">
>>> <form name="mainForm">
>>> <foo><input ng-model="myInput" name="myInput" type="text"></foo>
>>> </form>
>>> </div>
>>>
>>> where <foo> has the following template:
>>>
>>> <div ng-form="fooForm">
>>> <div ng-transclude></div>
>>> <button ng-click="saveChanges()">ok</button>
>>> <button ng-click="cancelChanges()">cancel</button>
>>> </div>
>>>
>>> NgModelController takes a scope as constructor param. Does that mean
>>> that there will/can be multiple instances of NgModelController associated
>>> with transcluded <input>:
>>>
>>> 1. one at $scope.mainForm.myInput (using $scope from MainCtrl)
>>> 1. mainForm will also be accessible to transcluded scope (via
>>> prototypal inheritance)
>>> 2. another at scope.fooForm.myInput (using isolate scope from <foo>)
>>>
>>>
>>> ...and if so, can those two ctrls at times have unequal $viewValue and
>>> $modelValue values - since the latter is derived from NgModelController's
>>> scope?
>>>
>>> -nikita
>>>
>>>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.