2014-01-30 114 views
2

此線程遵循angularjs share data config between controllers

所以我不知道,如果不是用手屬性複製/法 是它的安全做這樣

.factory('MyTest',function(){ 
     return { 
      prop: 'Mytest', 
      myFunc: function(){ 
       alert('Hello'); 
      } 
     } 
    }) 
.controller('IndexCtrl', function ($scope,MyTest) { 
     angular.extend($scope,MyTest); 
     console.log($scope); 
    }) 

更新 它僅適用於財產 作品,當然,但如果它是安全可能是一件好事 找到一種方法來應用它也爲方法。

更新1

這似乎是一個好辦法:

'use strict'; 
       (function(window, angular, undefined) { 
        'use strict'; 
        angular.module('ctrl.parent', []) 
         .controller('ParentController',function (scope) { 
          scope.vocalization = ''; 
          scope.vocalize = function() { 
           console.log(scope.vocalization); 
          }; 
        }); 
       })(window, angular); 
       angular.module('app',['ctrl.parent']) 
        .controller('ChildCtrl', function($scope,$controller){ 

        angular.extend($scope, new $controller('ParentController', {scope:$scope})); 
$scope.vocalization = 'BARK BARK'; 
       }); 

信貸@marfarma

更新2

我不知道爲什麼這並未不工作

'use strict'; 
      angular.module('animal', []) 
       .factory('Animal',function(){ 
        return function(vocalization){ 
         return { 
          vocalization:vocalization, 
          vocalize : function() { 
           console.log('vocalize: ' + this.vocalization); 
          } 
         } 
        } 
       });  
       angular.module('app', ['animal']) 
        .factory('Dog', function (Animal) { 
         function ngPost() {}; 
         ngPost.prototype.status = ['publish','draft']; 
         return angular.extend(Animal('bark bark!'), new ngPost()); 
        }) 
        .factory('Cat', function (Animal) { 
         return Animal('meeeooooow'); 
        }) 
       .controller('MainCtrl',function($scope,Cat,Dog){ 
        $scope.cat = Cat; 
        $scope.dog = Dog; 
        console.log($scope.cat); 
        console.log($scope.dog); 
        //$scope.cat = Cat; 
       }); 

這個作品

.factory('Dog', function (Animal) { 
         function ngDog(){ 
          this.prop = 'my prop'; 
          this.myMethod = function(){ 
           console.log('test'); 
          } 
         } 
         return angular.extend(Animal('bark bark!'), new ngDog()); 
        }) 

更新3

抱歉打擾你,但之後的 一段時間思考這個主題,我認爲我的問題被誤解(或者我沒有解釋自己清楚)我想要什麼真正知道如果做像

angular.extend($scope,MyService) 

可能是壞/去od練習 它破解了oop封裝原理嗎? 我的意思是它聞起來像

MyService.call($scope); 

,你可能面臨的變量和函數發生衝突

所以.......

+0

達斯汀霍夫曼有人問過同樣的問題https://www.youtube.com/watch?v=c-OviftusB8 ...結果是未知的。 –

回答

4

你可以看看extend功能的來源和看到它的安全:

function extend(dst) { 
    var h = dst.$$hashKey; 
    forEach(arguments, function(obj){ 
    if (obj !== dst) { 
     forEach(obj, function(value, key){ 
     dst[key] = value; 
     }); 
    } 
    }); 

    setHashKey(dst,h); 
    return dst; 
} 
+0

即將做什麼的方法?你能給我一個提示嗎? – Whisher

+0

你是什麼意思的「做同樣的方法」?使用'extend'將所有屬性(也包括函數)複製到目標對象。 –

+0

是的,就像那樣 – Whisher