2014-01-30 77 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