3

現在這不是問題,但它讓我有點好奇。

我有一個簡單的指令,我不知道爲什麼 - 可以在$ rootScope中使用。

JAVASCRIPT:

(function(){ 

    var app = angular.module('myApp', ['m.directives']); 

    app.run(function($rootScope){ 
    console.log($rootScope); 
    }); 

    angular.module('m.directives', []) 
    .directive('mUserSidebar', mUserSidebarDirective); 

    function mUserSidebarDirective() { 

    return { 
     restrict: 'A', 
     replace: true, 
     template: "<p>{{userSidebar.date | date : 'HH:mm'}}</p>", 
     controller: mUserSidebarController, 
     controllerAs: 'userSidebar' 
    }; 
    }; 

    mUserSidebarController.$inject = ['$interval']; 

    function mUserSidebarController($interval) { 

    var vm = this; 
    vm.date = new Date(); 

    vm.logOut = function(){ 
     console.log('log out'); 
    } 

    function refreshDate(){ 

     $interval(function(){ 
     vm.date = new Date(); 
     }, 1000); 
    } 

    refreshDate(); 
    } 
})(); 

HTML:

<div data-ng-app="myApp"> 
    <p style="font-weight: bold"> directive: </p> 
    <div data-m-user-sidebar></div> 
    <p style="font-weight: bold; margin-top: 50px">rootScope</p> 
    <div>{{$root.userSidebar}}</div> 
</div> 

例:http://jsfiddle.net/y8qgmhcw/


更有趣,如果我將用它來與UI路由器一起,我把指令:

1)UI視圖:該指令是不是在$ rootScope avaible

2)UI視圖:它在$ rootScope中可用


因此。問題是:

1)爲什麼會發生這種情況?

2)是我的錯嗎?我錯過了什麼嗎? :-)

3)我可以做任何事情來忽略這種行爲嗎?

回答

1

想通了!

由於在我的指令定義對象「scope」變量未定義,我的指令使用其父作用域($ rootScope)。

所以,DDO應該是這樣的:

function mUserSidebarDirective() { 

    return { 
     restrict: 'A', 
     replace: true, 
     scope: true, 
     template: "<p>{{userSidebar.date | date : 'HH:mm'}}</p>", 
     controller: mUserSidebarController, 
     controllerAs: 'userSidebar' 
    }; 
    }; 

FIXED:http://jsfiddle.net/y8qgmhcw/1/

相關問題