link: function (scope, element, attrs, uiSrefActive) {
     var type = getTypeInfo(element);
     var active = uiSrefActive[1] || uiSrefActive[0];
     var unlinkInfoFn = null;
     var hookFn;
     var rawDef = {};
     var getDef = function () { return processedDef($state, element, rawDef); };
     var ref = parseStateRef(attrs.uiSref);
     rawDef.uiState = ref.state;
     rawDef.uiStateOpts = attrs.uiSrefOpts ? scope.$eval(attrs.uiSrefOpts) : {};
     function update() {
         var def = getDef();
         if (unlinkInfoFn)
             unlinkInfoFn();
         if (active)
             unlinkInfoFn = active.$$addStateInfo(def.uiState, def.uiStateParams);
         if (def.href != null)
             attrs.$set(type.attr, def.href);
     }
     if (ref.paramExpr) {
         scope.$watch(ref.paramExpr, function (val) {
             rawDef.uiStateParams = core_1.extend({}, val);
             update();
         }, true);
         rawDef.uiStateParams = core_1.extend({}, scope.$eval(ref.paramExpr));
     }
     update();
     scope.$on('$destroy', $uiRouter.stateRegistry.onStatesChanged(update));
     scope.$on('$destroy', $uiRouter.transitionService.onSuccess({}, update));
     if (!type.clickable)
         return;
     hookFn = clickHook(element, $state, $timeout, type, getDef);
     bindEvents(element, scope, hookFn, rawDef.uiStateOpts);
 },
Example #2
0
 return function (scope, $element) {
     var data = $element.data('$uiView');
     if (!data) {
         $element.html(initial);
         $compile($element.contents())(scope);
         return;
     }
     var cfg = data.$cfg || { viewDecl: {}, getTemplate: core_1.noop };
     var resolveCtx = cfg.path && new core_1.ResolveContext(cfg.path);
     $element.html(cfg.getTemplate($element, resolveCtx) || initial);
     core_1.trace.traceUIViewFill(data.$uiView, $element.html());
     var link = $compile($element.contents());
     var controller = cfg.controller;
     var controllerAs = getControllerAs(cfg);
     var resolveAs = getResolveAs(cfg);
     var locals = resolveCtx && services_1.getLocals(resolveCtx);
     scope[resolveAs] = locals;
     if (controller) {
         var controllerInstance = $controller(controller, core_1.extend({}, locals, { $scope: scope, $element: $element }));
         if (controllerAs) {
             scope[controllerAs] = controllerInstance;
             scope[controllerAs][resolveAs] = locals;
         }
         // TODO: Use $view service as a central point for registering component-level hooks
         // Then, when a component is created, tell the $view service, so it can invoke hooks
         // $view.componentLoaded(controllerInstance, { $scope: scope, $element: $element });
         // scope.$on('$destroy', () => $view.componentUnloaded(controllerInstance, { $scope: scope, $element: $element }));
         $element.data('$ngControllerController', controllerInstance);
         $element.children().data('$ngControllerController', controllerInstance);
         registerControllerCallbacks($q, $transitions, controllerInstance, scope, cfg);
     }
     // Wait for the component to appear in the DOM
     if (core_1.isString(cfg.viewDecl.component)) {
         var cmp_1 = cfg.viewDecl.component;
         var kebobName = core_1.kebobString(cmp_1);
         var tagRegexp_1 = new RegExp("^(x-|data-)?" + kebobName + "$", 'i');
         var getComponentController = function () {
             var directiveEl = [].slice
                 .call($element[0].children)
                 .filter(function (el) { return el && el.tagName && tagRegexp_1.exec(el.tagName); });
             return directiveEl && angular_1.ng.element(directiveEl).data("$" + cmp_1 + "Controller");
         };
         var deregisterWatch_1 = scope.$watch(getComponentController, function (ctrlInstance) {
             if (!ctrlInstance)
                 return;
             registerControllerCallbacks($q, $transitions, ctrlInstance, scope, cfg);
             deregisterWatch_1();
         });
     }
     link(scope);
 };
Example #3
0
 forEach(viewsObject, function (config, name) {
     // Account for views: { "": { template... } }
     name = name || '$default';
     // Account for views: { header: "headerComponent" }
     if (isString(config))
         config = { component: config };
     // Make a shallow copy of the config object
     config = extend({}, config);
     // Do not allow a view to mix props for component-style view with props for template/controller-style view
     if (hasAnyKey(compKeys, config) && hasAnyKey(nonCompKeys, config)) {
         throw new Error("Cannot combine: " + compKeys.join('|') + " with: " + nonCompKeys.join('|') + " in stateview: '" + name + "@" + state.name + "'");
     }
     config.resolveAs = config.resolveAs || '$resolve';
     config.$type = 'ng1';
     config.$context = state;
     config.$name = name;
     var normalized = ViewService.normalizeUIViewTarget(config.$context, config.$name);
     config.$uiViewName = normalized.uiViewName;
     config.$uiViewContextAnchor = normalized.uiViewContextAnchor;
     views[name] = config;
 });
/** @hidden */
function processedDef($state, $element, def) {
    var uiState = def.uiState || $state.current.name;
    var uiStateOpts = core_1.extend(defaultOpts($element, $state), def.uiStateOpts || {});
    var href = $state.href(uiState, def.uiStateParams, uiStateOpts);
    return { uiState: uiState, uiStateParams: def.uiStateParams, uiStateOpts: uiStateOpts, href: href };
}
 scope.$watch(ref.paramExpr, function (val) {
     rawDef.uiStateParams = core_1.extend({}, val);
     update();
 }, true);
Example #6
0
 return $q.all(promises).then(function (results) {
     trace.traceViewServiceEvent('Loaded', _this);
     _this.controller = results.controller;
     extend(_this, results.template); // Either { template: "tpl" } or { component: "cmpName" }
     return _this;
 });
Example #7
0
 var params = this.path.reduce(function (acc, node) { return extend(acc, node.paramValues); }, {});
 function decoratedNg1Hook(trans, state) {
     var resolveContext = new core_1.ResolveContext(trans.treeChanges(pathname));
     var subContext = resolveContext.subContext(state.$$state());
     var locals = core_1.extend(services_1.getLocals(subContext), { $state$: state, $transition$: trans });
     return core_1.services.$injector.invoke(hook, this, locals);
 }
 function decoratedNg1Hook(trans, state) {
     var resolveContext = new ResolveContext(trans.treeChanges(pathname));
     var locals = extend(getLocals(resolveContext), { $state$: state, $transition$: trans });
     return services.$injector.invoke(hook, this, locals);
 }
Example #10
0
var getStateProvider = function () {
    return extend(router.stateProvider, { $get: function () { return router.stateService; } });
};