2013-06-28 37 views
35

Tôi muốn thực hiện một số nội dung khi ứng dụng của tôi tải để thiết lập trạng thái mặc định. Vì vậy, tôi đang cố gắng sử dụng phương thức chạy trên đối tượng Module. Khi tôi cố gắng truy cập biến $ scope mặc dù tôi nhận được thông báo "Uncaught ReferenceError: $ scope is not defined" trong bảng điều khiển của tôi.

Xem ví dụ sau http://jsfiddle.net/F2Z2X/1/

app = angular.module('myapp', []); 

app.controller('mycontroller', function($scope){ 
    $scope.data = { myvariable: 'Hello' }; 
}); 

app.run(
    alert($scope.data.myvariable)) 
); 

Tôi đi về việc này hoàn toàn sai?

Ví dụ: tôi muốn chạy hàm watchAction một lần ở đầu, để ẩn các phần tử giao diện người dùng chưa được gọi, nhưng hàm watchAction không có đối tượng $ scope vì nó không được gọi bởi phương pháp xem vì vậy tôi phải chuyển nó cho nó, nhưng than ôi nó không có sẵn.

+0

.run được chạy một lần ngay từ đầu khởi tạo. Tôi không nghĩ rằng nó có nhiều ý nghĩa để có một phạm vi $ tại thời điểm đó. Bạn có thể vượt qua $ rootScope tho. –

Trả lời

75
app.run(function ($rootScope) { 
    $rootScope.someData = {message: "hello"}; 
}); 

Bạn có thể chỉ nhận được $rootScope tiêm để servicesrun chức năng, bởi vì mỗi child scope được thừa hưởng từ phạm vi mẹ của nó và phạm vi cấp cao nhất là rootScope. Vì sẽ không rõ ràng khi tiêm bất kỳ phạm vi nào. Chỉ phạm vi gốc được cung cấp.

+0

1 câu hỏi: Nếu tôi thêm bất kỳ trình xử lý sự kiện nào trong khối chạy như '$ rootScope.on ('myevent', function() {})' .... tôi nên gọi $ destroy như thế nào? Trên $ rootScope chính nó? Bởi vì nếu tôi không làm, tôi nhận được lỗi lint .... và không thể sử dụng phạm vi $ trong khối chạy. – Pawan

3
var app = angular.module('myApp', []); 
app.run(function ($rootScope) { 
    // use .run to access $rootScope 
    $rootScope.rootProperty = 'root scope'; 
}); 

app.controller("ParentCtrl", ParentCtrlFunction); 
app.controller("ChildCtrl", ChildCtrlFunction); 
function ParentCtrlFunction($scope) { 
    // use .controller to access properties inside ng-controller 
    //in the DOM omit $scope, it is inferred based on the current controller 
    $scope.parentProperty = 'parent scope'; 
} 
function ChildCtrlFunction($scope) { 
    $scope.childProperty = 'child scope'; 
    //just like in the DOM, we can access any of the properties in the 
    //prototype chain directly from the current $scope 
    $scope.fullSentenceFromChild = 'Same $scope: We can access: ' + 
    $scope.rootProperty + ' and ' + 
    $scope.parentProperty + ' and ' + 
    $scope.childProperty; 
} 

ví dụ: https://github.com/shekkar/ng-book/blob/master/7_beginning-directives/current-scope-introduction.html

Đó là luồng đơn giản, chúng tôi có rootScope, parentScope, childScope. Trong mỗi phần chúng tôi chỉ định các biến phạm vi tương ứng.chúng ta có thể truy cập $ rootScope trong parentScope, rootScope và parentScope trong childScope.

+0

Bạn có thể chỉnh sửa bài đăng của mình sau khi đọc bài này không? http://stackoverflow.com/editing-help – brasofilo

+0

điểm nào trong việc thêm câu trả lời mới cho câu hỏi đã được trả lời và chấp nhận gần một năm trước? – ivarni

+3

Tôi muốn chia sẻ kiến ​​thức của mình, trong ví dụ này giải thích về rootScope với parentScope và parentScope đến childScope và url giải thích mã html cạnh tranh, tôi hy vọng điều này có thể hữu ích cho @Tristan và những người khác – Shekkar

Các vấn đề liên quan